This guide covers installing Shadowrocket on a Linux desktop: identify your distribution and CPU architecture, choose DEB, RPM, or AppImage, then address dependencies, executable permissions, and first-launch errors. The filenames in the commands are examples to rename locally after downloading; they are not download URLs. Get app files from this site's download page.
1. Choose a Linux package: check your distribution, then your architecture
Choose a package format based on your Linux distribution's package manager, not its desktop appearance. Ubuntu, Debian, and distributions using the same package management system typically use DEB; Fedora and other systems using dnf use RPM. If you prefer a standalone application file, check whether the AppImage is compatible with your system. RPM is a file format; not every RPM-based distribution uses dnf.
-
Identify your system
Open a terminal and run
cat /etc/os-release. CheckIDandID_LIKE. Confirm the package manager using your distribution's official documentation rather than relying on the file manager or desktop theme. -
Check the architecture
Run
uname -m. Common output:x86_64indicates 64-bit x86, andaarch64indicates 64-bit ARM. The architecture must match the package available on the download page. -
Get the file
Open the Linux section of the download page and choose a file that matches your system. If no package matches your architecture, don't try to run another one by changing its extension or repeatedly granting permissions.
-
Prepare the directory
Open the download folder in your file manager, then choose the option to open a terminal there. Run the commands below in the directory containing the file. If the directory path contains spaces, put the full path in quotation marks when changing directories.
cat /etc/os-release
uname -m
pwd
ls -lh
On Linux, uname -m reports the machine architecture but cannot confirm that an AppImage has all its runtime dependencies. The amd64 label in a DEB package usually corresponds to the machine architecture reported as x86_64; the different names don't mean you need to convert the file. Check the download page's specifications against the package metadata.
2. Debian / Ubuntu: install a local DEB with apt
On Debian and Ubuntu, use apt install ./filename.deb to install a local DEB and let the package manager handle dependencies. In your file manager, rename the DEB you just downloaded to shadowrocket.deb. Make sure the current directory contains only the target file for this installation, then run the command below. Renaming only makes the command easier to type; it doesn't change the package's internal name or architecture.
dpkg-deb -f ./shadowrocket.deb Package Architecture
sudo apt update
sudo apt install ./shadowrocket.deb
On Debian-based systems, the first command reads the package's name and architecture without installing it; the second refreshes the indexes for configured software sources; the third installs the local file in the current directory. Don't omit ./: without it, apt may search for a package by name instead of opening the downloaded file. When prompted for your sudo password, the terminal usually won't show any characters as you type. This is normal.
- File not found: Run
pwdandls -lhto check the current directory, capitalization, and actual file extension. Don't use a webpage URL as a local file argument. - Unsatisfied dependencies: Note the missing dependency names and version requirements, then check your system version and configured software sources. Don't add software sources from another distribution just to complete the installation.
- Architecture mismatch: Compare the
dpkg-deboutput with your system architecture and choose the correct file. Changing executable permissions won't fix an architecture mismatch. - Lock held by another process: Check whether the system updater or another apt process is running, and wait for it to finish. Don't delete the lock file.
3. Fedora: install a local RPM with dnf
On Fedora, use dnf to install an RPM downloaded to your computer. Rename the downloaded file locally to shadowrocket.rpm, go to the directory containing it, and check the package information before installing. If another RPM-based system doesn't use dnf, follow that distribution's package management process instead of copying Fedora commands.
rpm -qp --queryformat '%{NAME} %{ARCH}\n' ./shadowrocket.rpm
sudo dnf install ./shadowrocket.rpm
On Fedora, rpm -qp checks an uninstalled package file and displays its internal name and architecture. dnf install handles installation and dependency resolution. When the confirmation summary appears, review the packages to be installed, upgraded, or removed before continuing. If it lists a large number of unexpected removals, stop and check system compatibility.
Use the package manager for your system
Debian / Ubuntu
- The local file is in DEB format.
- Read package information with
dpkg-deb -f. - Install with
apt install ./shadowrocket.deb.
Fedora
- The local file is in RPM format.
- Read package information with
rpm -qp. - Install with
dnf install ./shadowrocket.rpm.
Identify your system first, then run the matching set of commands. You don't need to run both sets for the same installation.
On Fedora, troubleshoot download failures, dependency conflicts, and signature warnings separately. A dependency download failure usually calls for checking your software sources and network. For dependency conflicts, review the package names and requirements. For warnings about the file's source or signature, confirm it came from this site's download page and check your system's policy. Don't treat skipping checks as a standard installation step.
4. AppImage: make it executable and run it from a terminal
On Linux, AppImage files aren't installed with apt or dnf, but they still depend on CPU architecture, system libraries, mount options, and the desktop environment. “No installation required” means you can launch the app while keeping the file; it doesn't mean every distribution can run it. Rename the downloaded file locally to Shadowrocket.AppImage and place it in a directory where your user has write permission and executable files are allowed.
ls -l ./Shadowrocket.AppImage
chmod u+x ./Shadowrocket.AppImage
./Shadowrocket.AppImage
For AppImage, chmod u+x adds execute permission for the file's owner. It's a targeted alternative to chmod +x. The ./ prefix runs a file in the current directory; entering only the filename usually searches directories listed in PATH. Launching the app from a terminal the first time can reveal errors that aren't visible when double-clicking.
| Terminal output | Check first | What to do |
|---|---|---|
Permission denied | Execute permission and the filesystem's mount options | Check ls -l first. If the file already has execute permission, check whether it's on a noexec mount. |
Exec format error | CPU architecture or file contents | Compare uname -m with file ./Shadowrocket.AppImage. If needed, download a matching file again. |
| FUSE-related error | The FUSE environment required to run AppImage | Check your distribution's documentation for compatible libraries. Package names vary between distributions, so don't copy package names from another system. |
| Unable to connect to the display server | Whether the command is running in a graphical desktop session | Launch it from a terminal in your desktop session. An SSH session or a system without a graphical session isn't the same as a desktop environment. |
An AppImage on a removable drive or shared directory may be blocked by mount policies, even if ls -l shows it as executable. Try moving the file to a directory under your home folder that allows execution. Don't try to fix this by recursively changing permissions across the entire Downloads folder, granting all users write access, or disabling system security features.
5. First launch: distinguish a successful installation from a working connection
Seeing the Shadowrocket window on Linux confirms that the app has launched; it doesn't confirm that a proxy connection is working. Further setup assumes you already have a provider and subscription. This site doesn't provide, sell, or recommend nodes or subscriptions. Import your existing configuration first, then check the connection status on Home and review Global Routing. Reinstalling the app won't help if no configuration has been added.
- Open the installed app from your desktop's app list, or run the saved file if you're using AppImage. If the system requests permission, review what it's for and grant it only if appropriate.
- Check the active configuration in Config and make sure your existing subscription imported correctly. The example URL
https://example.com/sub?token=xxxxis for illustration only and isn't a working subscription. - Return to Home and check the SERVER list, selected entry, and Global Routing. If the connection toggle still shows
Not Connected, troubleshoot the connection first. - After configuring the app and establishing a connection, use
Connectivity Testto check the result. A test timeout doesn't mean the DEB, RPM, or AppImage installation failed. Continue by checking the target, network, and configuration.
In interfaces that offer Global Routing, Config, Proxy, Direct, and Scene are routing modes, not installation formats. The comparison below applies only to connections handled by the app. Whether system traffic reaches the app also depends on how traffic is intercepted and the permissions granted. For your first check, use one target and change one setting at a time. Changing the mode, DNS, and subscription together makes it harder to identify the cause.
Config
RecommendedLet the rules in your current configuration determine the routing policy. Check the order of rules such as DOMAIN-SUFFIX, IP-CIDR, and GEOIP, and review the destination of the final FINAL rule. Config doesn't mean unmatched connections will always go direct.
Best for: validating everyday rule-based routing with an existing, working rules configuration.
Proxy
Route connections handled by the app through a proxy. Use this to compare with the results under Config. If it still fails after switching, check the selected server and network conditions.
Best for: temporarily distinguishing rule-selection issues from proxy connection issues.
Direct
Route connections handled by the app directly. This doesn't stop the app, and a webpage opening in this mode alone doesn't prove that your proxy configuration works.
Best for: checking whether your current network can connect directly.
If your interface shows Scene, check the settings for the relevant scene before assessing its behavior. Don't assume Scene always means global proxy routing or always means direct routing. Interface locations may vary across Linux builds; follow the labels visible in your current app. Check system connection permissions, app routing, and server connectivity separately.
6. Updates and troubleshooting notes: keep your configuration and avoid reinstalling unnecessarily
Before updating on Linux, save any configuration details you need, especially subscription sources, manually entered server settings, and rules files. Don't assume different package formats share the same data directory, or that deleting the app file removes all configuration. Keep information containing tokens, passwords, or private keys secure; don't include it in public troubleshooting notes.
- DEB update: Get the appropriate file from the download page, then run the local DEB installation command. Let the package manager determine whether to upgrade based on the package metadata; don't infer the update relationship from the filename.
- RPM update: Use dnf to handle the local RPM, and review the transaction summary. If a conflict occurs, keep the original error message and don't force an overwrite of system files.
- AppImage update: Quit any running instance and save your configuration before replacing the file. Check the new file's executable permission; you may also need to update the target path in any existing desktop shortcut.
- Duplicate windows or an old app instance: Check whether you have launch entries for a DEB, RPM, or AppImage at the same time. Identify which copy is currently running before deciding which installation method to keep.
On Linux, troubleshoot in this order: “file compatibility → package manager or execute permission → app launch → configuration and connection.” Choose another package only if the problem occurs at the first step. Once the app opens normally, focus on app configuration and network diagnostics instead of using repeated uninstalls to mask the real issue.