Shadowrocket for Linux: Install DEB, RPM, or AppImage with apt or dnf

Choose a package format for your distribution: install DEB packages with apt on Debian-based systems or RPM packages with dnf on Fedora. AppImage needs no installation—run chmod +x first to make it executable.

At a glance

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.

  1. Identify your system

    Open a terminal and run cat /etc/os-release. Check ID and ID_LIKE. Confirm the package manager using your distribution's official documentation rather than relying on the file manager or desktop theme.

  2. Check the architecture

    Run uname -m. Common output: x86_64 indicates 64-bit x86, and aarch64 indicates 64-bit ARM. The architecture must match the package available on the download page.

  3. 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.

  4. 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.

3 formats
This guide covers DEB, RPM, and AppImage
2 checks
Check the distribution and CPU architecture before installing
./
In commands, this refers to a file in the current directory

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.

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 outputCheck firstWhat to do
Permission deniedExecute permission and the filesystem's mount optionsCheck ls -l first. If the file already has execute permission, check whether it's on a noexec mount.
Exec format errorCPU architecture or file contentsCompare uname -m with file ./Shadowrocket.AppImage. If needed, download a matching file again.
FUSE-related errorThe FUSE environment required to run AppImageCheck 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 serverWhether the command is running in a graphical desktop sessionLaunch 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.

  1. 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.
  2. Check the active configuration in Config and make sure your existing subscription imported correctly. The example URL https://example.com/sub?token=xxxx is for illustration only and isn't a working subscription.
  3. 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.
  4. After configuring the app and establishing a connection, use Connectivity Test to 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

Recommended

Let 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.

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.

Download Shadowrocket