데스크톱 앱 배포

회사나 학교의 컴퓨터에 Antimatter 데스크톱 앱을 설치하고, Windows, macOS, Linux에서 서버, 사용자 이름, 업데이트 확인을 중앙에서 설정하는 방법입니다.

앱 다운로드

데스크톱 앱 릴리스는 github.com/AntimatterChat/desktop-app/releases의 GitHub에 있습니다. 서버와 마찬가지로 앱은 베타 버전이며, 하이픈 뒤에 접미사가 있는 버전의 릴리스는 Pre-release로 표시됩니다. 각 릴리스에는 모든 파일의 체크섬이 포함된 SHA256SUMS 파일이 있습니다. Linux에서는 sha256sum --check --ignore-missing SHA256SUMS로, PowerShell에서는 Get-FileHash <file> -Algorithm SHA256의 출력을 SHA256SUMS의 해당 줄과 비교하여 다운로드를 확인하세요.

  • Windows (x64 및 arm64): .exe 설치 프로그램, .msi 패키지 또는 .zip 아카이브. 예: antimatter-desktop-<version>-win-x64.exe 및 antimatter-desktop-<version>-win-x64.msi.
  • macOS: Apple silicon(arm64), Intel Mac(x64) 또는 두 가지 모두(universal)를 위한 .dmg 디스크 이미지 또는 .zip 파일.
  • Linux (x64 및 arm64): .deb 또는 .rpm 패키지, AppImage, Flatpak 번들 또는 .tar.gz 아카이브.

어떤 Windows 설치 프로그램을 사용할 것인가

.exe 설치 프로그램.msi 패키지
대상앱을 직접 설치하는 사용자컴퓨터에 앱을 배포하는 회사
설치관리자 권한 없이 현재 Windows 계정만 위해 %LOCALAPPDATA%\Programs\antimatter-desktop에 설치관리자 권한으로 컴퓨터의 모든 사용자를 위해 C:\Program Files\Antimatter에 설치
업데이트앱이 새 버전을 확인하고 새 .exe 다운로드를 제안하며, 설치된 복사본을 제자리에서 업데이트합니다앱이 새 버전을 확인하지 않습니다. 배포를 통해 업데이트를 수행합니다

앱은 실행 중 매시간 GitHub에서 새 버전을 확인하며, 프리릴리스가 아닌 정식 릴리스만 조회합니다. 새 버전을 찾으면 사용자에게 알려 다운로드 링크를 제공합니다. MSI로 설치한 복사본은 기본적으로 업데이트를 확인하지 않습니다. 이는 해당 복사본을 사용하는 사람이 소프트웨어를 설치할 권한이 없는 경우가 많기 때문입니다. EnableAutoUpdater 설정을 통해 MSI 복사본의 업데이트 확인을 활성화할 수 있습니다. 이 경우 제공되는 다운로드 파일은 관리자 권한이 필요한 새 .msi 파일입니다.

SCCM(구성 관리자), Intune 또는 그룹 정책 소프트웨어 설치를 통한 관리형 배포에 MSI를 사용하세요. MSI를 설치하면 설치 작업을 수행하는 계정의 .exe 복사본이 존재하는 경우 제거됩니다.

관리할 수 있는 설정

모든 시스템에 동일한 설정이 존재합니다. Windows에서는 HKEY_LOCAL_MACHINE(컴퓨터) 또는 HKEY_CURRENT_USER(단일 사용자)의 SOFTWARE\Policies\Antimatter 아래에 레지스트리 값으로, macOS와 Linux에서는 관리된 환경 설정 또는 정책 파일의 키로 존재합니다.

설정WindowsmacOS 및 Linux기능
DefaultServerList서버마다 하나의 문자열 값을 가진 서브키: 값 이름은 해당 탭의 이름이며, 데이터는 URL입니다name과 url를 가진 사전(리눅스에서는 객체)의 배열앱에 서버를 추가합니다. 사용자는 이를 편집하거나 제거할 수 없습니다.
DefaultUsername문자열문자열해당 서버의 로그인 페이지에 사용자 이름을 자동 입력합니다.
EnableServerManagementDWORD, 0 또는 1부울 값0 또는 false: 사용자는 DefaultServerList로 설정된 서버만 사용할 수 있으며, 앱에서 서버 추가, 편집, 제거 옵션이 숨겨집니다. 미설정: 사용자는 자신의 서버를 추가할 수 있습니다.
EnableAutoUpdaterDWORD, 0 또는 1부울 값0 또는 false: 앱이 새 버전을 절대 확인하지 않으며 업데이트 확인을 숨깁니다. 1 또는 true: MSI로 설치된 경우에도 확인합니다. 미설정: .exe 복사본은 확인하고, MSI 복사본은 확인하지 않습니다.
TrustedEmbeddedMediaOrigins각각 serverOrigin과 embeddedOrigin을 가진 JSON 객체인 문자열 값을 포함하는 서브키serverOrigin과 embeddedOrigin을 가진 사전의 배열서버 페이지에 내장된 콘텐츠(예: 화상 회의 페이지)가 해당 서버에 부여된 카메라 및 마이크 권한을 사용할 수 있도록 합니다.
  • 사용자 이름은 정책으로 설정된 서버의 로그인 페이지에서만 입력되며, 사용자가 직접 추가한 서버에서는 절대 입력되지 않습니다. 또한 사용자가 직접 입력한 값을 덮어쓰지 않습니다. 사용자는 여전히 값을 변경할 수 있습니다. 백분율 기호로 감싸진 환경 변수는 치환되므로 하나의 값으로 모든 사용자에게 적용할 수 있습니다: Windows의 %USERNAME% 또는 macOS와 Linux의 %USER%는 계정 이름을, %USERNAME%@example.com은 이 패턴을 따르는 이메일 주소를 제공합니다. 변수가 설정되지 않은 경우 앱은 아무것도 입력하지 않습니다.
  • 서버 관리를 끄는 경우, DefaultServerList에 최소 하나의 서버를 설정해야 합니다.
  • Windows에서는 컴퓨터 정책(HKEY_LOCAL_MACHINE)이 사용자 정책(HKEY_CURRENT_USER)보다 우선합니다. 두 정책의 서버 목록은 결합됩니다.
  • 앱은 시작할 때 설정을 읽습니다. 설정을 변경한 후에는 사용자가 앱을 종료하고 다시 열어야 합니다.

Windows: MSI를 통한 무음 설치

MSI는 설정을 컴퓨터 정책으로 기록하는 공개 속성을 받으며, 이 값은 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Antimatter에 저장됩니다. SCCM 애플리케이션, Intune 앱 또는 스크립트에서 이를 사용할 수 있습니다. PowerShell에서:

msiexec /i antimatter-desktop-<version>-win-x64.msi /qn SERVERURL=https://chat.example.com SERVERNAME=Chat DEFAULTUSERNAME='%USERNAME%' AUTOUPDATE=0 SERVERMANAGEMENT=0
속성기록 내용값이 제공되지 않은 경우
SERVERURL이 URL을 가진 DefaultServerList의 서버서버 없음
SERVERNAME해당 서버 탭의 이름Antimatter
DEFAULTUSERNAMEDefaultUsername아무것도 없음
AUTOUPDATEEnableAutoUpdater, 0 또는 1아무것도 없음: MSI 복사본은 업데이트를 확인하지 않습니다
SERVERMANAGEMENTEnableServerManagement, 0 또는 1아무것도 없음: 사용자가 서버를 추가할 수 있습니다
  • 제공되지 않은 속성은 아무것도 기록하지 않으므로 그룹 정책으로 설정된 값을 덮어쓰지 않습니다. AUTOUPDATE와 SERVERMANAGEMENT는 0 또는 1만 허용합니다. MSI는 하나의 서버만 설정합니다: 여러 서버를 사용하려면 그룹 정책을 사용하세요.
  • DEFAULTUSERNAME는 설치 프로그램에 %USERNAME%라는 텍스트로 전달되어야 하며, 이렇게 해야 앱이 각 사용자별로 이를 치환할 수 있습니다. 그렇지 않으면 설치를 실행하는 셸이 자신의 계정 이름으로 치환합니다. PowerShell에서는 단일 인용문을 유지하세요. .bat 파일에서는 %%USERNAME%%라고 작성하세요. 테스트 설치 후 레지스트리에서 DefaultUsername에 %USERNAME%가 있는지 확인하세요.
  • 업그레이드 시에도 속성을 다시 전달하세요. MSI의 새 버전을 설치하면 이전 버전이 제거되고, 이전 버전이 기록한 값도 함께 삭제된 후 새 명령줄의 값이 기록됩니다. SCCM과 Intune은 애플리케이션의 명령줄을 유지합니다: 각 새 버전에 대해 이를 재사용하세요. 또는 그룹 정책 또는 Intune으로 정책을 설정하면 업그레이드가 이를 건드리지 않습니다.
  • MSI와 그룹 정책은 동일한 레지스트리 값을 기록합니다. 각 설정에 대해 둘 중 하나만 사용하세요. MSI를 제거하면 그룹 정책으로 설정된 경우에도 MSI가 기록한 값이 삭제됩니다.
  • MSI는 또한 설치 폴더를 HKEY_LOCAL_MACHINE\SOFTWARE\Antimatter\Desktop의 InstallDir에 기록합니다. 이를 통해 앱이 MSI로 설치되었음을 알 수 있습니다.

제거하려면: msiexec /x antimatter-desktop-<version>-win-x64.msi /qn. Intune에서는 "Windows app (Win32)" 유형에 동일한 명령줄을 사용합니다. "Line-of-business app" 유형의 경우, 해당 명령줄 인수에 속성을 추가하세요.

Windows: 그룹 정책 및 Intune

관리 템플릿인 antimatter.admx와 en-US\antimatter.adml는 설치된 앱의 gpo 폴더(MSI의 경우 C:\Program Files\Antimatter\gpo) 및 앱 저장소의 resources/windows/gpo 폴더에 있습니다. Administrative Templates › Antimatter 아래에 다음 정책이 표시됩니다:

정책레지스트리 값설정
서버(DefaultServerList)DefaultServerList 하위 키컴퓨터 및 사용자
미리 채울 사용자 이름(DefaultUsername)DefaultUsername컴퓨터 및 사용자
서버 추가 및 제거 허용(EnableServerManagement)EnableServerManagement컴퓨터 및 사용자
새 버전 알림(EnableAutoUpdater)EnableAutoUpdater컴퓨터만
신뢰할 수 있는 내장 미디어 출처(TrustedEmbeddedMediaOrigins)TrustedEmbeddedMediaOrigins 하위 키컴퓨터 및 사용자

도메인에서 그룹 정책

  1. antimatter.admx를 중앙 저장소인 \\<domain>\SYSVOL\<domain>\Policies\PolicyDefinitions에, antimatter.adml를 해당 en-US 폴더에 복사합니다.
  2. 그룹 정책 관리 편집기에서 Computer Configuration(또는 User Configuration) › Policies › Administrative Templates › Antimatter를 엽니다.
  3. 정책을 편집하고 활성화를 선택한 후 값을 입력합니다. 서버의 경우 보기를 클릭하여 서버마다 한 줄씩 추가합니다. 값 이름은 탭 이름, 값은 서버 URL(예: https://chat.example.com)입니다.

서버 추가 및 제거 허용 또는 새 버전 알림을 활성화하면 1이, 비활성화하면 0이 기록됩니다.

Intune

기기 › 설정에서 ADMX 가져오기를 사용하여 antimatter.admx와 en-US\antimatter.adml를 가져옵니다. 그런 다음 템플릿 › 가져온 관리 템플릿에서 프로필을 생성하고, 해당 프로필에 Antimatter 정책을 설정합니다.

단일 컴퓨터 또는 스크립트

템플릿을 C:\Windows\PolicyDefinitions에 복사하여 gpedit.msc(Windows Pro 및 Enterprise)에서 사용할 수 있습니다. 또는 .reg 파일을 관리자로 가져와 레지스트리 값을 직접 작성할 수 있습니다(예: reg import antimatter-policies.reg). 같은 폴더의 example-policies.reg 파일에는 주석이 포함된 해당 값들이 있습니다.

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Antimatter]
"EnableServerManagement"=dword:00000000
"EnableAutoUpdater"=dword:00000000
"DefaultUsername"="%USERNAME%"

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Antimatter\DefaultServerList]
"Chat"="https://chat.example.com"

macOS: 구성 프로필

macOS에서는 앱이 번들 식별자 chat.antimatter.desktop의 관리된 환경설정에서 설정 테이블의 키를 사용하여 설정을 읽습니다. MDM(Jamf, Intune, Kandji, Mosyle 등)을 통해 구성 프로필로 배포합니다.

  • 앱 저장소의 resources/mac/mdm 폴더에는 예시 프로필 antimatter.mobileconfig가 있습니다. 값을 편집하고, 고유한 PayloadIdentifier 및 PayloadUUID 값(uuidgen으로 새 UUID 생성)을 지정한 후, 사용자 지정 프로필로 업로드합니다.
  • 대부분의 MDM은 chat.antimatter.desktop에 대한 "사용자 지정 설정" 또는 "환경설정 도메인" 페이로드로서 키만으로도 수락합니다. 같은 폴더에 example-managed-preferences.plist 파일에 해당 값들이 포함되어 있습니다.

프로필 페이로드 내의 설정:

<key>PayloadType</key>
<string>chat.antimatter.desktop</string>
<key>DefaultServerList</key>
<array>
    <dict>
        <key>name</key>
        <string>Chat</string>
        <key>url</key>
        <string>https://chat.example.com</string>
    </dict>
</array>
<key>DefaultUsername</key>
<string>%USER%</string>
<key>EnableServerManagement</key>
<false/>
<key>EnableAutoUpdater</key>
<false/>

부울 값은 정수 0과 1로도 지정할 수 있습니다.

Linux: 정책 파일

Linux에서는 앱이 /etc/antimatter-desktop/policies.json을 읽습니다. 이 파일은 설정 테이블의 키를 가진 JSON 객체입니다:

{
    "DefaultServerList": [
        {"name": "Chat", "url": "https://chat.example.com"}
    ],
    "DefaultUsername": "%USER%",
    "EnableServerManagement": false,
    "EnableAutoUpdater": false,
    "TrustedEmbeddedMediaOrigins": []
}

구성 관리 도구(Ansible, Puppet, Salt 등)를 사용하여 배포하며, root가 소유하고, 모든 사용자에게 읽기 권한이 있고, root만 쓰기 권한이 있도록 설정합니다:

sudo install -d /etc/antimatter-desktop
sudo install -m 644 policies.json /etc/antimatter-desktop/policies.json

유효하지 않은 JSON 파일은 무시되며, 앱 로그에 경고가 표시됩니다. Flatpak 버전은 호스트의 /etc를 볼 수 없습니다: 읽기 액세스를 부여하면, 파일은 /run/host/etc/antimatter-desktop/policies.json에서 읽힙니다:

sudo flatpak override --system --filesystem=host-etc:ro chat.antimatter.desktop

Mattermost 데스크톱 앱에 설정된 정책

Windows에서는 앱이 SOFTWARE\Policies\Mattermost 아래에 설정된 Mattermost 데스크톱 앱의 정책을 폴백으로 읽습니다. 위치별로 읽으며, 정책 키 바로 아래 값, DefaultServerList 서브키, TrustedEmbeddedMediaOrigins 서브키를 읽습니다. 이 세 위치 각각에서, 두 하이브 모두에서 Antimatter 키에 값이 없을 때만 Mattermost 키를 읽습니다. 따라서 Antimatter 키 바로 아래에 값이 하나라도 설정되면, 예를 들어 MSI의 AUTOUPDATE 속성으로 설정된 경우, Mattermost 키 바로 아래에 있는 값은 더 이상 읽히지 않습니다. 모든 정책을 한 번에 Antimatter 키로 이동하세요.

macOS에서는 Mattermost 데스크톱 앱의 관리된 환경설정(com.mattermost.desktop)이 읽히지 않습니다: chat.antimatter.desktop에 설정하세요.

서명되지 않은 빌드

데스크톱 앱의 빌드는 아직 게시자 인증서로 서명되지 않았습니다.

  • Windows. 사용자가 다운로드한 .exe 또는 .msi를 열면, Microsoft Defender SmartScreen이 Windows가 컴퓨터를 보호했다고 알려주고 알 수 없는 게시자를 명시합니다. 사용자는 자세한 정보를 선택한 후 그대로 실행을 선택합니다. SmartScreen은 다운로드 후 사용자가 여는 파일을 검사하므로, SCCM, Intune 또는 그룹 정책을 통해 앱을 배포할 경우 이 경고가 표시되지 않습니다. 컴퓨터가 승인된 게시자의 소프트웨어만 실행하도록 설정되어 있는 경우(AppLocker 또는 App Control for Business 규칙), 앱의 설치 경로 또는 파일 해시로 허용하세요.
  • macOS. 앱은 임시(ad hoc)로 서명되었지만 Apple에 의해 공증(notarise)되지 않았습니다. 사용자가 다운로드한 복사본을 처음 열면, macOS가 앱에 악성웨어가 없는지 확인할 수 없다고 알려주고 앱을 열지 않습니다. macOS 15 이상에서는 시스템 설정 › 개인정보 보호 및 보안을 열고 그대로 열기를 선택합니다. 이전 버전에서는 앱을 Control-클릭하여 열기를 선택합니다. Gatekeeper는 다운로드됨으로 표시된 파일(격리 속성이 있는)만 검사합니다: 자체 도구를 사용하여 앱을 설치할 경우, 설치 스크립트에서 xattr -dr com.apple.quarantine /Applications/Antimatter.app를 사용하여 표시를 제거하세요.