Before installing Shadowrocket on Linux, check your distribution and CPU architecture, then choose DEB, RPM, or AppImage. This guide is for Linux users with a graphical desktop. It explains how to choose a package, provides Bash commands that select the file you actually downloaded, and covers dependency errors, execute permissions, desktop launchers, and connection settings. Installing the app does not provide a working connection; the steps that follow assume you already have your own service and subscription.
1. Check your distribution, architecture, and download source
Debian and Ubuntu users should generally choose DEB; Fedora users should generally choose RPM and use dnf. If you prefer not to register the app in the system package database, consider AppImage. Package format and CPU architecture are separate requirements: a matching file extension does not mean the program inside supports your CPU.
Go to the Linux section on the download page for all platforms and choose from the packages and architectures actually listed there. The Linux version is free. The iPhone / iPad version costs $2.99 as a one-time App Store purchase; the Mac (Apple silicon and Intel), Windows, and Android versions are also free. Check the App Store page for iPhone / iPad system requirements.
-
Identify your distribution
Open a terminal and run
cat /etc/os-releaseto checkID,ID_LIKE, andPRETTY_NAME. Don’t identify your distribution by desktop appearance alone: the same desktop can run on different package systems. -
Check your architecture
Run
uname -m. The outputx86_64indicates the common 64-bit Intel / AMD architecture;aarch64indicates 64-bit ARM. Choose only a file that the download page explicitly lists for your architecture. -
Choose a package
Open the Linux section of the download page and select a format supported by your distribution. Using RPM does not mean you should always use dnf. For other RPM-based distributions, follow their package manager’s instructions rather than copying Fedora commands.
-
Locate the downloaded file
Use your browser’s download history to open the folder containing the file and confirm the download is complete. The commands below assume the file is in
$HOME/Downloads. If your system uses another download folder, replace the directory in the commands with the actual path.
cat /etc/os-release
uname -m
| Environment | Preferred format | How to install or run |
|---|---|---|
| Debian / Ubuntu | deb | Install the local file with apt and resolve available dependencies |
| Fedora | rpm | Install the local file with dnf and review the transaction plan |
| Compatible graphical desktop environment | AppImage | Add execute permission and run; runtime requirements still apply |
2. Debian / Ubuntu: Install a DEB with apt
To install a local DEB with apt install, pass the file as a path. Don’t omit the leading ./ from a relative path, or apt may interpret the input as a package name. apt can fetch dependencies from enabled repositories, but older distributions may not have every library the program requires.
Run the following commands in Bash. They list DEB files in your Downloads folder so you can select the actual file by number, without relying on a fixed filename. The folder may contain installers for other apps, so make sure you select the Shadowrocket file you just downloaded from this site. If no matching file is found, the script won’t run the installation.
(
cd "$HOME/Downloads" || exit 1
shopt -s nullglob
packages=(./*.deb)
if ((${#packages[@]} == 0)); then
printf '%s\n' 'No DEB files in this directory. Check the download location.'
exit 1
fi
PS3='Enter the number for the Shadowrocket DEB file: '
select pkg in "${packages[@]}"; do
if [[ -n "$pkg" ]]; then
sudo apt install "$pkg"
break
fi
printf '%s\n' 'Enter a valid number from the list.'
done
)
- Review the transaction summary first: Check which packages will be installed, upgraded, or removed. If many unexpected packages are set to be removed, enter
nto cancel and check distribution compatibility before proceeding. - If dependency downloads fail: Check that your system repositories are available. If needed, run
sudo apt updateto refresh the package index, then retry with the same file. Refreshing the index does not make an incompatible package compatible. - If dependencies cannot be satisfied: Note the exact dependency names and requirements, then check whether the download page supports your distribution. Don’t add repositories for another distribution or force the installation past dependency checks.
- After installation succeeds: Search for Shadowrocket in your desktop’s applications menu. A successful installation command and a program that launches successfully are separate checks; verify both.
3. Fedora: Install an RPM with dnf
On Fedora, dnf can install a local RPM and check dependencies and conflicts in the same transaction. Don’t assume an RPM built for another distribution will work just because it has the same file extension. Library names, dependency requirements, and desktop integration can all differ.
(
cd "$HOME/Downloads" || exit 1
shopt -s nullglob
packages=(./*.rpm)
if ((${#packages[@]} == 0)); then
printf '%s\n' 'No RPM files in this directory. Check the download location.'
exit 1
fi
PS3='Enter the number for the Shadowrocket RPM file: '
select pkg in "${packages[@]}"; do
if [[ -n "$pkg" ]]; then
sudo dnf install "$pkg"
break
fi
printf '%s\n' 'Enter a valid number from the list.'
done
)
If you see an architecture mismatch, dependency conflict, or package verification error, stop the transaction and save the full message. Don’t add options to skip verification or force file replacement. If the terminal says the same package is already installed, check its current status first; repeatedly running the install command won’t fix connection problems.
DEB installation essentials
- Supported environment
- Debian / Ubuntu and compatible distributions
- Local path
- Start with
./and quote the full path - Dependency source
- Repositories enabled on the current system
- What to check if it fails
- Dependency names, architecture, and apt transaction summary
The package file and dependency environment must both be compatible.
RPM installation essentials
- Covered here
- Fedora with dnf
- Local path
- Pass the actual RPM path to dnf
- What to check
- The transaction list before dnf runs
- Stop if you see
- Architecture mismatch, conflicts, or verification errors
Don’t use Fedora commands on every RPM-based system.
4. AppImage: Add execute permission and launch
An AppImage typically runs as a single executable file, without the package installation transaction required by DEB or RPM. That doesn’t mean it has no system dependencies. CPU architecture, the graphical environment, runtime libraries, and mount options can all affect startup. Move the file to a location where you plan to keep it so it won’t be lost when you clear your Downloads folder.
These Bash commands add execute permission only to the selected file for the current user, then launch it as that user. Don’t recursively change permissions for your entire Downloads folder, and don’t use sudo to launch the graphical app.
(
cd "$HOME/Downloads" || exit 1
shopt -s nullglob
packages=(./*.AppImage)
if ((${#packages[@]} == 0)); then
printf '%s\n' 'No AppImage files in this directory. Check the download location.'
exit 1
fi
PS3='Enter the number for the Shadowrocket AppImage file: '
select pkg in "${packages[@]}"; do
if [[ -n "$pkg" ]]; then
chmod u+x -- "$pkg" && "$pkg"
break
fi
printf '%s\n' 'Enter a valid number from the list.'
done
)
- If you see Permission denied: Check the file’s execute permission and the filesystem it’s on. Even after running
chmod u+x, a filesystem mounted with thenoexecoption may still block execution. Move the file to a personal directory that allows execution and try again. - If you see an error mentioning libfuse.so.2: The FUSE 2 compatibility library is likely missing. On Debian / Ubuntu, run
apt-cache policy libfuse2 libfuse2t64to see which packages are available for your distribution, then follow its guidance. Don’t blindly copy a library name from another system. - If you see Exec format error: First compare the output of
uname -mwith the architecture listed on the download page. Adding execute permission won’t fix an architecture mismatch. - If double-clicking opens no window: Run the file from a terminal to see the error. If you launched it from a remote terminal without a graphical session, check it from the local desktop session instead of repeatedly changing permissions.
5. First launch: Check startup and connectivity separately
If the window opens, the app has passed the startup check. Establishing a connection also depends on your existing configuration, network, name resolution, and selected policy. This site does not provide, sell, or recommend nodes or subscriptions. A connection timeout by itself does not indicate an installation problem.
- Launch as a regular user: Open Shadowrocket from the applications menu or launch the AppImage. If the app requests necessary system permissions, read each prompt carefully. Don’t launch the entire client as root preemptively.
- Have your own connection details ready: Check the address, port, protocol, and authentication details provided by your service provider. Treat subscription links as credentials and don’t post them in public support requests.
- Check where settings are: Review existing connection entries in Home, the configuration you plan to use in Config, and relevant options in Settings. Available options vary by platform; refer to what your current interface shows.
- Check the routing mode: If the interface offers Global Routing, first check whether it is set to Config, Proxy, or Direct. Direct is not a suitable way to determine whether a proxy connection is working.
- Test one thing at a time: Start with the same destination and change only one variable at a time. Note whether the connection times out, whether name resolution fails, and whether only certain destinations are affected. Don’t change the protocol, rules, and DNS all at once.
To test rule behavior, use this minimal example in Config to understand the order. example.com is a documentation domain, not a server address; PROXY must match a policy available in your current configuration. Don’t replace an existing complete configuration with this snippet.
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
Rules are evaluated from top to bottom; the policy on the first matching line is applied. Put FINAL last to handle requests that don’t match earlier rules. The example uses 192.168.0.0/16 to demonstrate direct access to a local network; it does not cover all private addresses. no-resolve means the app won’t actively resolve a domain for that IP rule. It is not a switch that fixes every DNS problem.
6. Global Routing: Choose a mode for your test
During installation troubleshooting, routing mode helps narrow down the cause; no single mode is always better. These comparisons cover Shadowrocket’s own settings only. The traffic it can handle still depends on platform permissions and the current network connection method; they do not imply unconditional handling of all system traffic.
Config
RecommendedChoose a policy using the rules in the active configuration. First check the active configuration in Config, then review rule order and FINAL. Rules can specify PROXY, DIRECT, or REJECT; don’t assume unmatched requests always go direct.
Best for: everyday use and rule testing with explicit rules already in place
Proxy
Route requests handled by the client through a proxy to temporarily rule out the effects of rule-based routing. If the same destination works in Proxy but not in Config, check the matching rules and policy first rather than reinstalling the app.
Best for: temporarily isolating differences between rules and connectivity
Direct
Route requests handled by the client directly to see how the current network reaches a destination. Success in Direct does not mean the proxy connection works or confirm that subscription details are valid.
Best for: establishing a direct-connection baseline and comparing network behavior
7. Common issues: Troubleshoot by stage
Before asking for help, identify whether the issue occurs during download, package installation, app startup, or connection. Include the full error message, distribution name, and CPU architecture; these are more useful than simply saying “it won’t open.” Before sharing logs, remove authentication details, subscription links, and personal addresses.
apt says it can’t find the package. Did I download the wrong file?
First check that the command includes a file path. A DEB in the current directory should start with ./; the selection script in this guide preserves that prefix. If the file can’t be found, check your browser’s download history for its actual location and make sure the download has finished. Don’t guess the filename from memory.
What should I do if dnf reports a dependency conflict partway through installation?
Cancel the transaction, note the names of the conflicting packages, and check your distribution and architecture. Don’t proceed with a transaction that would remove many packages, and don’t bypass the issue by forcing file replacement. Return to the download page to verify that the RPM supports your environment, then consider another compatible format listed there.
Why won’t my AppImage run even after I added execute permission?
Run the file from a terminal and troubleshoot based on the error: for Permission denied, check file permissions and mount options; for Exec format error, check the architecture; for libfuse.so.2 errors, check the FUSE compatibility library. These are different causes. Repeating chmod helps only in some Permission denied cases.
The window opens, but the connection fails. Should I reinstall?
First check the selected entry in Home, then the current Global Routing mode and active rules in Config. Confirm that your own connection address, port, and authentication details are still valid. Test the same destination in both Direct and Proxy modes. Return to the installation steps only if there’s evidence of a missing executable or a failed package transaction.
Can I just delete the old files when updating?
Install new DEB or RPM files downloaded from this site with the corresponding package manager, and review the upgrade transaction. Don’t manually delete program files from system directories. For AppImage, quit the running app before replacing the saved file, then check its execute permission. Back up your own configuration before updating, and check the launcher and active configuration afterward.