Linux 데스크톱에 Shadowrocket을 설치하려는 사용자를 위한 안내입니다. 먼저 배포판과 CPU 아키텍처를 확인한 다음 deb, rpm 또는 AppImage를 선택하고, 설치와 실행 권한 설정 및 첫 연결 점검을 진행합니다. 명령어에는 실제로 다운로드한 파일의 전체 경로를 사용하므로 특정 패키지 이름에 의존하지 않습니다. 연결 설정은 사용자가 이미 보유한 서비스 제공업체의 정보와 구독이 있다는 전제입니다.
1. 다운로드 전에 배포판과 CPU 아키텍처 확인
Shadowrocket은 Linux 버전을 제공합니다. 이용 방법은 두 가지입니다. iPhone/iPad 버전은 App Store에서 $2.99 일회성 결제로 구매할 수 있으며, 개발자는 Shadow Launch Technology Limited입니다. 시스템 요구 사항은 App Store 페이지를 확인하세요. Mac(Apple 실리콘 및 Intel), Windows, Android, Linux 버전은 무료입니다. 이 글에서 안내하는 설치 패키지는 모두 사이트의 전체 플랫폼 다운로드 페이지에서 받습니다. 명령어에 다운로드 주소를 직접 입력하지 마세요.
파일 확장자는 패키지 형식을 나타낼 뿐 CPU 아키텍처를 뜻하지 않습니다. Linux라도 x86_64와 aarch64 패키지는 서로 바꿔 쓸 수 없습니다. 먼저 터미널에서 아래 읽기 전용 명령을 실행해 배포판 이름과 버전, 시스템 아키텍처를 확인한 다음 다운로드 페이지에 표시된 패키지 정보를 대조하세요.
cat /etc/os-release
uname -m
배포판 정보
- 확인 위치
/etc/os-release- ID
- ubuntu, debian, fedora 등 배포판을 확인할 수 있습니다.
- ID_LIKE
- 정보가 있다면 배포판 계열을 파악하는 데 도움이 됩니다.
- VERSION_ID
- 시스템 버전을 기록해 두면 런타임 라이브러리 호환 문제를 확인할 때 유용합니다.
같은 계열의 배포판이라도 모든 버전에서 동일한 바이너리가 실행되는 것은 아닙니다.
아키텍처 정보
- 확인 명령어
uname -m- x86_64
- 일반적인 Intel/AMD 64비트 아키텍처입니다. 패키지 표기는 보통 amd64 또는 x86_64입니다.
- aarch64
- ARM 64비트 아키텍처입니다. 패키지 표기는 보통 arm64 또는 aarch64입니다.
- 선택 기준
- 확장자가 같더라도 섞어 설치하지 말고 다운로드 페이지에 실제로 표시된 아키텍처를 선택하세요.
AppImage에도 아키텍처 요구 사항이 있습니다. CPU 아키텍처를 변환해 주는 형식이 아닙니다.
2. deb, rpm, AppImage 중 선택하기
가능하면 배포판의 패키지 관리자와 호환되는 형식을 선택하세요. 설치 상태를 기록하고, 저장소에서 제공하는 의존성을 설치 과정에서 처리할 수 있습니다. AppImage는 앱 본체를 시스템 디렉터리에 설치하고 싶지 않을 때 적합하지만, 시스템 런타임 라이브러리와 데스크톱 환경, 파일 시스템의 마운트 옵션에는 여전히 영향을 받습니다. 모든 Linux 시스템에서 더블클릭만으로 실행된다고 볼 수는 없습니다.
| 형식 | 주요 지원 시스템 | 설치 또는 실행 방법 | 유의 사항 |
|---|---|---|---|
| deb | Debian, Ubuntu 및 호환 배포판 | apt install과 로컬 파일 경로 | 로컬 파일 경로에는 슬래시가 포함되어야 합니다. 전체 경로 사용을 권장합니다. |
| rpm | Fedora 및 dnf를 사용하는 호환 배포판 | dnf install과 로컬 파일 경로 | 다른 rpm 기반 시스템은 의존성과 패키지 관리 명령이 다를 수 있습니다. |
| AppImage | 패키지 실행 조건을 충족하는 Linux 데스크톱 | 실행 권한을 부여한 뒤 파일 실행 | 아키텍처 호환 여부, 실행 가능한 마운트 위치, 필요한 런타임 라이브러리를 확인해야 합니다. |
시스템 확인
cat /etc/os-release와uname -m을 실행하세요. 데스크톱 화면만 보고 배포판을 추측하지 마세요.형식 선택
사이트 다운로드 페이지의 Linux 섹션에서 배포판과 제공되는 아키텍처에 맞는 파일을 선택한 후 브라우저 다운로드가 완료될 때까지 기다리세요.
경로 기록
파일 관리자에서 파일 속성을 확인해 파일 이름이 포함된 전체 경로를 기록하세요. 아래에서 터미널에 경로를 입력하라고 안내할 때 따옴표를 덧붙이지 마세요.
설치 실행
해당 형식의 안내에 따라 진행하세요. 패키지 관리자가 표시하는 변경 사항을 확인하고 시스템 구성 요소가 예상치 않게 제거되지 않는지 살핀 뒤 계속하세요.
실행 확인
설치가 끝나면 앱 메뉴에서 실행하세요. AppImage는 터미널에서 실행하고, 문제를 파악할 수 있도록 오류 출력을 보관하세요.
3. Debian/Ubuntu: apt로 로컬 deb 설치
아래 명령은 Bash 터미널에서 실행합니다. 첫 번째 줄에서 다운로드한 deb 파일의 전체 경로를 입력하라는 메시지가 표시됩니다. 파일 속성에서 복사한 경로 등을 입력하세요. 경로만 입력하면 되며, 경로에 공백이 있어도 직접 따옴표를 붙일 필요가 없습니다. 이후 명령에서는 변수를 큰따옴표로 감쌉니다. 먼저 패키지 정보를 확인한 다음 apt로 설치합니다.
read -r -p 'deb 파일의 전체 경로를 입력하세요: ' pkg
dpkg-deb --field "$pkg" Package Version Architecture
sudo apt update
sudo apt install "$pkg"
apt update는 시스템 소프트웨어 저장소의 인덱스를 업데이트하는 명령이며, Shadowrocket의 설정이나 구독을 업데이트하지 않습니다. apt install은 로컬 deb 파일을 읽고 이미 활성화된 소프트웨어 저장소에서 의존성을 설치하려고 합니다. 전체 경로를 입력하는 것이 중요합니다. 슬래시가 없는 파일 이름만 입력하면 apt가 저장소에서 해당 패키지 이름을 검색할 수 있습니다.
- 파일이 없다는 메시지가 표시되면
ls -l -- "$pkg"로 경로를 확인하고, 다운로드가 완료되지 않은 임시 파일을 선택하지 않았는지 살펴보세요. - 의존성을 충족할 수 없다는 메시지가 표시되면 시스템 버전과 소프트웨어 저장소가 서로 맞는지 확인하세요. 단일 의존성 문제를 해결하려고 다른 배포판의 저장소를 현재 시스템에 추가하지 마세요.
- 아키텍처가 맞지 않는다는 메시지가 표시되면 패키지의
Architecture와uname -m결과를 대조하고 다운로드 페이지에서 올바른 파일을 다시 선택하세요. - 잠금 파일이 사용 중이라는 메시지가 표시되면 시스템 업데이트나 다른 패키지 관리 작업이 끝날 때까지 기다리세요. 잠금 파일을 바로 삭제하지 마세요.
4. Fedora 계열: dnf로 로컬 rpm 설치
dnf를 사용하는 시스템에서는 로컬 rpm도 하위 수준 도구로 강제 설치하기보다 패키지 관리자를 이용하는 것이 좋습니다. 먼저 패키지 정보를 읽어 이름과 아키텍처를 확인한 다음 설치하세요. 아래 변수는 deb 설치 절차와 별개이므로 새 Bash 터미널에서 그대로 실행할 수 있습니다.
read -r -p 'rpm 파일의 전체 경로를 입력하세요: ' pkg
rpm -qp --queryformat '%{NAME}\n%{VERSION}-%{RELEASE}\n%{ARCH}\n' "$pkg"
sudo dnf install "$pkg"
dnf는 현재 활성화된 소프트웨어 저장소를 이용해 의존성을 확인합니다. rpm 형식을 사용한다고 해서 해당 시스템의 의존성 버전이 Fedora와 완전히 일치하는 것은 아닙니다. nothing provides 메시지가 나타나면 누락된 라이브러리 이름과 버전 조건을 확인하고 배포판 호환성을 살펴보세요. 의존성을 바로 무시하지 마세요.
- 소프트웨어 저장소에 연결할 수 없다면 먼저 시스템 저장소의 접속 문제를 해결하세요. 설치 패키지가 로컬에 있어도 모든 의존성이 로컬에 있는 것은 아닙니다.
- 작업 요약에서 중요한 데스크톱 구성 요소를 제거한다고 표시되면 설치를 취소하고 패키지와 시스템의 호환성을 다시 확인하세요.
- 설치가 완료됐는데 메뉴에 바로 나타나지 않으면 앱 메뉴에서 Shadowrocket을 다시 검색하세요. 필요하면 현재 데스크톱 세션에서 로그아웃한 뒤 다시 로그인하세요.
- 의존성 오류를 숨기려고
--nodeps를 사용하지 마세요. 설치가 성공으로 기록되어도 프로그램이 실행 가능한 환경을 갖췄다는 뜻은 아닙니다.
5. AppImage: 실행 권한, 저장 위치 및 실행
AppImage는 보통 단일 파일로 직접 실행되며 apt나 dnf의 설치 기록에 등록되지 않습니다. 다운로드 폴더를 정리하다 실수로 삭제하지 않도록 사용자가 쓰기 권한을 가진 고정 디렉터리에 보관하는 것이 좋습니다. 아래에서는 전체 경로를 입력한 다음 파일 소유자에게만 실행 권한을 추가하고, 현재 일반 사용자로 실행합니다.
read -r -p 'AppImage 파일의 전체 경로를 입력하세요: ' app
ls -l -- "$app"
chmod u+x -- "$app"
"$app"
chmod +x는 실행 권한을 추가할 때 흔히 사용하는 명령입니다. 여기서는 chmod u+x를 사용해 변경 범위를 파일 소유자로 한정합니다. 앱 실행 시 기본적으로 sudo를 붙이지 마세요. 사용자 설정 디렉터리에 root 소유 파일이 생성되면 이후 일반 사용자로 실행할 때 설정을 저장하지 못할 수 있습니다.
실행 권한을 추가했는데도 Permission denied가 표시되는 이유는 무엇인가요?
먼저 ls -l -- "$app"을 실행해 소유자의 실행 권한을 확인한 다음 findmnt -T "$app"으로 마운트 위치를 확인하세요. 마운트 옵션에 noexec가 있으면 실행이 허용되는 로컬 사용자 디렉터리로 파일을 옮긴 뒤 다시 시도하세요. 파일 하나를 실행하려고 외장 드라이브 전체의 보안 정책을 바꾸지 마세요.
터미널에 libfuse.so.2가 없다고 표시됩니다. 무엇을 설치해야 하나요?
일부 AppImage 런타임에는 FUSE 2 호환 라이브러리가 필요합니다. 먼저 apt 또는 dnf의 검색 기능으로 현재 배포판에서 제공하는 호환 라이브러리를 찾고 시스템 문서를 확인한 뒤 설치하세요. 시스템에 따라 패키지 이름은 libfuse2, libfuse2t64 또는 다른 이름일 수 있습니다. 기존 FUSE 구성 요소를 바로 제거하지 마세요.
Exec format error가 나타납니다. 파일 권한이 부족한가요?
먼저 바이너리 아키텍처를 확인하세요. file -- "$app"을 실행해 uname -m 결과와 대조하세요. chmod를 다시 실행해도 x86_64 프로그램이 ARM 프로그램으로 바뀌지는 않습니다. 파일 형식이 예상과 다르면 다운로드가 완전히 끝났는지도 확인하세요.
더블클릭해도 창이 열리지 않습니다. 구체적인 오류를 확인하려면 어떻게 하나요?
터미널에서 "$app"을 실행하고 처음 표시되는 오류 메시지를 보관하세요. 공유 라이브러리 누락, 그래픽 세션 사용 불가, 샌드박스 초기화 실패는 각각 다른 문제입니다. 샌드박스를 끄거나 root로 실행하는 방법으로 모든 문제를 해결하려고 하지 마세요.
6. 첫 연결: 설치, 연결, 규칙 문제 구분
창이 열린다는 것은 앱이 실행됐다는 뜻일 뿐, 사용 가능한 연결이 있다는 뜻은 아닙니다. Shadowrocket에는 연결 서비스가 포함되어 있지 않습니다. 이 사이트는 노드나 구독을 제공·판매·추천하지 않습니다. 이미 이용 중인 서비스 제공업체의 설정 정보나 구독을 사용하고, 가져오기 전에 출처를 확인하세요. 전체 구독 링크가 공개 스크린샷이나 로그, 터미널 기록에 노출되지 않도록 주의하세요.
Home에서 가져온 항목과 현재 선택을 확인하고, Config에서 사용 중인 구성을 확인하며, Settings에서 관련 설정을 살펴보세요. 플랫폼에 따라 메뉴 위치가 다를 수 있으므로 실제 화면을 기준으로 조작하세요. 휴대폰 시스템의 VPN 권한 승인 절차를 Linux에 그대로 적용하지 마세요. 시스템 네트워크 권한 요청이 나타나면 용도를 먼저 읽고 시스템 안내에 따라 승인하세요.
Global Routing → Config
권장현재 구성에 따라 처리 대상 요청을 처리합니다. 먼저 구성이 활성화되어 있는지 확인한 다음 규칙 적용 결과를 살펴보세요. 예를 들어 DOMAIN-SUFFIX는 도메인 접미사를 일치시키고 FINAL은 기본 정책을 제공합니다.
적합한 경우: 검토된 구성을 이미 보유하고 있으며 평소 규칙에 따라 사용하려는 경우
Global Routing → Proxy
처리 대상으로 지정된 요청을 프록시 방식으로 처리합니다. 연결 문제와 규칙 문제를 구분할 때 임시로 사용할 수 있습니다. 시스템의 모든 프로그램 트래픽이 자동으로 처리된다는 뜻은 아닙니다.
적합한 경우: 사용 가능한 연결이 있고 규칙이 접속에 영향을 주는지 일시적으로 확인하려는 경우
Global Routing → Direct
처리 대상으로 지정된 요청을 직접 연결합니다. 이 방식으로 바꾼 뒤 특정 사이트가 열려도 직접 연결 경로를 사용할 수 있다는 뜻일 뿐, 프록시 서비스가 정상이라는 근거는 아닙니다.
적합한 경우: 직접 연결 결과와 비교해 프록시 경로의 문제를 분리하려는 경우
브라우저와 터미널의 동작이 다르면 시스템 프록시, 앱 자체의 프록시 설정, 환경 변수를 각각 확인하세요. 터미널 프로그램이 데스크톱 시스템 프록시를 반드시 사용하는 것은 아닙니다. 로컬 수신 포트를 특정 숫자라고 단정하지 말고 현재 설정에 표시된 프로토콜과 주소, 포트를 기준으로 확인하세요.
env | grep -iE '^(http|https|all|no)_proxy='
이 명령은 현재 터미널에 설정된 프록시 환경 변수만 표시하며 설정을 변경하지 않습니다. 아무것도 출력되지 않아도 Shadowrocket이 실행 중이지 않다는 뜻은 아닙니다. 값이 출력되면 해당 변수가 가리키는 로컬 포트가 실제로 수신 대기 중인지 확인하세요. 문제를 점검할 때는 한 번에 한 항목만 변경하고 변경 전후의 접속 결과를 기록하세요.
7. 업데이트 및 제거: 기존 설치 방식 사용
deb와 rpm을 업데이트할 때는 사이트 다운로드 페이지에서 시스템에 맞는 새 패키지를 받은 뒤 apt 또는 dnf로 설치하세요. 로컬 패키지를 직접 설치했다고 해서 앱 업데이트 저장소를 구독하게 되는 것은 아닙니다. 시스템을 정기적으로 업데이트해도 Shadowrocket이 반드시 업데이트되는 것은 아닙니다. 설치 패키지 업데이트와 Home에서 구독을 새로 고치는 작업도 서로 다릅니다. 전자는 앱을 교체하고 후자는 기존 서비스의 연결 정보를 새로 고칩니다.
- deb 제거:
dpkg-deb --field "$pkg" Package출력에서 실제 패키지 이름을 확인한 다음 해당 이름을 사용해sudo apt remove를 실행하세요. 제품 화면에 표시된 이름으로 패키지 이름을 추측하지 마세요. - rpm 제거:
rpm -qp --queryformat '%{NAME}\n' "$pkg"로 패키지 이름을 확인한 다음 해당 이름을 사용해sudo dnf remove를 실행하고 작업 요약을 읽으세요. - AppImage 업데이트: 앱을 종료하고 구성을 보관한 뒤 기존 파일을 새 파일로 교체하세요. 새 파일에는
chmod u+x를 다시 실행해야 할 수 있습니다. - AppImage 제거: 먼저 앱을 종료한 뒤 파일과 직접 만든 데스크톱 바로 가기를 삭제하세요. 사용자 구성은 별도로 남을 수 있으므로 구성 디렉터리 전체를 무작정 비우지 마세요.