원문 캡처 · github.com
원문 캡처 · github.com

Corvus는 signal-cli를 바탕으로 Signal 계정을 연결해 메시지를 주고받는 데스크톱 앱이다. Linux·Windows용 Qt 앱과 macOS용 Qt 앱 및 SwiftUI 앱을 제공하며, 채팅 기록은 암호화해 로컬에 저장한다.

기능과 이용 조건

Corvus를 사용하려면 signal-cli를 설치하고 Signal 계정에 연결해야 한다. Corvus는 그래픽 인터페이스를 제공하는 클라이언트이며 signal-cli를 대체하지 않는다. Windows 설치 프로그램은 signal-cli를 대신 내려받을 수 있다.

앱에서 그룹 대화를 포함한 메시지를 읽고 보낼 수 있으며, 답장과 반응, 파일·이미지·동영상·오디오 전송을 지원한다. 메시지 수정·삭제, 보관된 대화 관리, 사라지는 메시지, 데스크톱 알림과 알림음, 시스템 트레이 또는 메뉴 막대 아이콘도 제공한다. 채팅 색상과 모양을 설정할 수 있다.

대화 기록은 암호화된 로컬 파일로 저장하며, 키는 기본적으로 운영체제 키체인에 보관한다. 설정에서 암호 구문 보호로 바꿀 수도 있다. Qt 버전에서는 연락처의 안전 번호를 확인하고 인증된 연락처로 표시할 수 있다. 대화에서 마우스 오른쪽 버튼을 눌러 View safety number …를 선택한다.

Qt 버전은 음성 메시지 녹음·전송도 지원한다. 첨부 버튼 옆의 🎤 버튼을 사용하며, 음성 메모로 도착하려면 signal-cli 0.14.2 이상이 필요하다. Signal의 한 번 보기(View Once) 사진은 이미지 한 장만 선택한 뒤 1×를 누르면 보낼 수 있으며, signal-cli 0.13.18 이상이 필요하다. 텍스트 메시지·첨부 파일·스티커는 대화 최대 5곳에 한 번에 전달할 수 있다. 메시지를 마우스 오른쪽 버튼으로 눌러 Forward…를 선택한다.

설치와 첫 실행

적합한 패키지는 최신 GitHub 릴리스에서 내려받는다.

Linux용 Qt 패키지는 x86_64를 지원한다. 설치 프로그램을 내려받아 압축을 풀고 실행한다.

sh
tar -xzf corvus-linux-x86_64-installer.tar.gz
./install.sh

이 설치 프로그램은 사용자별로 설치되며 sudo가 필요하지 않고, 애플리케이션 메뉴에 Corvus를 추가한다. 다시 실행하면 업데이트할 수 있고, ./install.sh --uninstall로 제거할 수 있다.

미리 빌드한 실행 파일은 동적 링크 방식이며 Qt 라이브러리를 포함하지 않는다. 호환되는 Qt 6 런타임이 필요하고, 릴리스는 Qt 6.12로 빌드됐다. QtKeychain 0.14 이상과 GNOME Keyring 또는 KWallet 같은 데스크톱 키링도 필요하다. signal-cli는 별도로 설치하고 PATH에서 찾을 수 있게 해야 한다.

Arch Linux에서는 릴리스의 corvus-*.pkg.tar.zst 패키지를 내려받아 설치한다.

sh
sudo pacman -U ./corvus-*.pkg.tar.zst

signal-cli는 별도로 설치해야 한다. 예를 들어 AUR에서 설치할 수 있다.

Linux x86_64용 Flatpak은 다음 명령으로 설치하고 실행한다.

sh
flatpak install --user ./corvus-linux-x86_64.flatpak
flatpak run io.github.ada_h00k.Corvus

자동 업데이트를 받으려면 각 빌드와 함께 GitHub Pages에 게시되는 서명된 Flatpak 저장소를 추가한 뒤 flatpak update로 업데이트한다.

sh
flatpak remote-add --user --if-not-exists corvus https://ada-h00k.github.io/Corvus/corvus.flatpakrepo
flatpak install --user corvus io.github.ada_h00k.Corvus

Flatpak에는 네이티브 빌드의 signal-cli와 qrencode가 포함돼 별도 설치가 필요 없다. Java도 필요하지 않다. 샌드박스에서 네트워크, Wayland/X11, 오디오, 동영상 재생용 GPU, 알림, 트레이 아이콘, 기록 키를 위한 Secret Service 권한만 사용한다. 파일 시스템에는 접근하지 않으며, 첨부 파일은 파일 선택기 포털을 통해 고르고 저장한다. 샌드박스 때문에 Flatpak은 ~/.var/app/io.github.ada_h00k.Corvus/에 별도 데이터를 보관하고, 기존 signal-cli 설치나 채팅 기록을 볼 수 없다. 처음 실행할 때 Signal 계정에 새 기기로 연결해야 한다.

Windows용 Qt 앱은 Windows 10 이상을 지원한다. corvus-windows-x64-setup.exe를 내려받아 실행한 다음 설치 마법사를 따른다. 설치 프로그램은 Qt 런타임과 기기 연결 때 QR 코드를 표시하는 데 쓰이는 qrencode를 Corvus와 함께 설치한다. signal-cli 설치 단계에서 이를 내려받고 비공개 Java 런타임을 설치하도록 선택할 수 있다. 사용자별 설치에는 관리자 권한이 필요하지 않다. 설치 프로그램은 코드 서명되지 않았으므로 Windows SmartScreen에서 경고가 표시될 수 있다.

포터블 버전을 쓰려면 corvus-windows-x64-portable.zip을 내려받아 압축을 풀고 corvus.exe를 실행한다. qrencode.exe도 포함돼 있다. 이 방식에서는 signal-cli를 직접 설치하고 설정해야 한다.

macOS에서는 Swift/SwiftUI 버전과 Qt 버전 중 하나를 설치할 수 있다. Swift/SwiftUI 버전은 macOS 네이티브 인터페이스를 사용하며 macOS 14 이상이 필요하다. Qt 버전은 Linux와 Windows에서 쓰는 것과 같은 크로스 플랫폼 인터페이스다. 먼저 Corvus 탭을 추가하고 signal-cli가 설치돼 있지 않다면 설치한다.

sh
brew tap ada-h00k/corvus
brew install signal-cli

그런 다음 원하는 버전을 설치한다.

sh
brew install --cask corvus-swift

Qt 버전을 설치하려면 다음 명령을 사용한다.

sh
brew install --cask corvus-qt

또는 최신 릴리스에서 Swift 버전의 corvus-macos-arm64.zip이나 Qt 버전의 corvus-qt-macos-arm64.zip을 내려받을 수 있다. 사전 빌드한 macOS 릴리스는 Apple silicon(arm64)용이다.

릴리스 앱은 공증되지 않고 임시 서명(ad-hoc signing)만 돼 있다. macOS 보안 설정에 따라 처음 실행할 때 Finder에서 앱을 마우스 오른쪽 버튼으로 눌러 열기를 선택해야 할 수 있다. 앱 출처를 신뢰하는 경우에만 경고를 무시해야 한다. Swift 버전과 Qt 버전은 같은 로컬 기록을 사용하므로 두 버전을 동시에 실행하지 않는다.

처음 실행할 때 Corvus는 별도 프로그램으로 signal-cli를 시작한다. 이를 찾지 못하면 설정에서 Path to signal-cli를 열고 실행 파일을 지정한다. 이 설치본을 아직 Signal에 연결하지 않았다면 Corvus의 계정 연결 안내를 따른다. macOS에서는 위와 같이 Homebrew로 signal-cli를 설치할 수 있다. Linux에서는 배포판의 설치 안내 또는 공식 signal-cli 릴리스를 이용한다. Windows 설치 마법사에서도 설치할 수 있다.

로컬 데이터와 암호화

Corvus는 채팅 기록을 암호화된 history.corvus 파일에 저장한다. 기본 설정에서는 기록 키를 운영체제 키체인에 보관하며, 설정의 History protection에서 암호 구문 보호로 바꿀 수 있다. 데이터 위치는 운영체제별로 다르다.

  • Linux: ~/.local/share/corvus/corvus/
  • macOS: ~/Library/Application Support/corvus/corvus/
  • Windows: %APPDATA%\\corvus

이전 이름인 Wren 또는 그 전 이름인 signal-cli Qt에서 업그레이드하면 처음 실행할 때 기존 채팅 기록, 설정, 키체인 항목(기록 키와 GIPHY API 키)을 자동으로 옮긴다. 기존 데이터는 삭제되지 않는다. 이전 버전이 실행 중이라면 먼저 종료해야 한다. Linux 설치 프로그램과 Arch 패키지는 기존 Wren 설치를 대체한다. macOS에서는 이전 Wren.app을 삭제할 수 있으며, 이전 키체인 항목을 읽도록 한 번 허용해 달라는 요청이 표시될 수 있다.

Corvus의 암호화는 로컬 채팅 기록을 보호한다. signal-cli 자체의 계정 데이터, 세션, 연락처, 첨부 파일은 암호화하지 않는다. 홈 디렉터리나 디스크는 운영체제의 디스크 암호화 기능으로 보호해야 한다. 기록 암호 구문을 잊으면 복구할 수 없다.

소스 빌드와 라이선스

Qt 앱을 빌드하려면 C++17 컴파일러, CMake 3.16 이상, Qt 6의 Widgets·Network·Multimedia·MultimediaWidgets·Svg 모듈, QtKeychain 0.14 이상, Rust와 Cargo가 필요하다. Debian/Ubuntu에서는 빌드 의존성을 설치한 뒤 컴파일한다.

sh
sudo apt update
sudo apt install build-essential cmake ninja-build qt6-base-dev qt6-multimedia-dev qt6-svg-dev qtkeychain-qt6-dev cargo rustc

cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel
./build/corvus

네이티브 Swift 앱을 빌드하려면 Xcode와 Rust를 설치한 뒤 다음 명령을 실행한다.

sh
cd macos
./scripts/build-app.sh
open build/Corvus.app

Swift 앱은 macOS 14 이상이 필요하다. Swift 개발 관련 안내는 macos/README.md에서 확인할 수 있다.

Corvus는 GNU Affero General Public License v3.0으로 배포된다. 별도 프로젝트인 signal-cli는 자체 라이선스로 배포된다.