Shadowrocket for Linux: Install DEB, RPM, or AppImage | apt, dnf & chmod +x

Choose a DEB, RPM, or AppImage for your distro, with apt/dnf install commands and steps to make an AppImage executable.

At a glance

This guide is for installing Shadowrocket on a Linux desktop: Debian and Ubuntu users generally choose DEB, Fedora users RPM, and other distributions may use AppImage if their systems meet its requirements. Check your distro and CPU architecture first, then install using the actual download path. After installation, import an existing configuration and verify that traffic is being handled as expected—a window opening does not mean the connection is working.

Check your distro, architecture, and download source first

Get the Shadowrocket Linux installer from this site’s download guide; choose a package format and architecture listed on the download page. The iPhone/iPad app costs $2.99 as a one-time App Store purchase; check the App Store page for system requirements. The Mac (Apple silicon and Intel), Windows, Android, and Linux versions are free. Getting the app and accessing a proxy service are separate; obtain any subscription you use from your service provider.

Run these two commands in a terminal. The first reads your distro information; check ID, ID_LIKE, and VERSION_ID. The second reports the machine architecture. Don’t choose a package format based on the desktop environment alone: the same desktop can run on different distributions.

cat /etc/os-release
uname -m

Distribution and package manager

Debian / Ubuntu
DEB is generally used, with apt handling local installation and dependencies.
Fedora
RPM is generally used, with dnf handling local installation and dependencies.
Other distributions
Check the supported distributions on the download page first. AppImage also has runtime requirements.

RPM is a package format; that doesn’t mean every RPM-based system uses dnf.

Match the CPU architecture

x86_64
Usually listed as x64 or amd64 in the download options.
aarch64
Usually listed as arm64 in the download options.
Other output
Check the download page for a matching build. Don’t force-install a package for a different architecture.

Architecture names vary; use the label shown on the download page.

Renaming a file extension does not convert a package: changing .deb to .rpm leaves the package structure unchanged. The commands below don’t assume a filename or use wildcards to install multiple files. Run each section in a Bash terminal. When prompted, enter the actual path to the downloaded file without surrounding quotes; spaces in the path are fine.

Debian / Ubuntu: Install a local DEB with apt

Make sure the download is complete, then run the commands below. read -r accepts the actual path, realpath -e checks that the file exists and converts it to an absolute path, and apt handles the installation. This avoids relying on the current working directory or mistaking a filename for a package in a repository.

read -r -p "Enter the path to the downloaded DEB file: " pkg
if [ -f "$pkg" ]; then
  pkg=$(realpath -e -- "$pkg") && sudo apt install "$pkg"
else
  printf '%s\n' "File not found. Check the path and try again."
fi

If dependencies can’t be found, first check that the distribution matches the package requirements. Then refresh the repository indexes with sudo apt update and try again. Updating the indexes won’t make an incompatible package compatible. If another package manager process holds a lock, wait for the system update to finish; don’t delete the lock file.

Fedora: Install a local RPM with dnf

On systems that use dnf, pass the local RPM directly to the install command. dnf handles the transaction and attempts to resolve dependencies. Don’t bypass dependency errors by ignoring dependencies; the package may appear installed but fail to launch.

read -r -p "Enter the path to the downloaded RPM file: " pkg
if [ -f "$pkg" ]; then
  pkg=$(realpath -e -- "$pkg") && sudo dnf install "$pkg"
else
  printf '%s\n' "File not found. Check the path and try again."
fi
  1. Check the package architecture shown in the terminal and make sure it matches uname -m.
  2. Review the dependency and transaction summary. Make sure it won’t unexpectedly remove important desktop components.
  3. After installation, search for Shadowrocket in the desktop app menu and launch it.
  4. If you see a dependency or trust error, keep the full message and recheck the download source and distro requirements. Don’t resolve it by disabling system verification.

Other RPM-based distributions may not use dnf or meet the same dependency requirements. Don’t copy Fedora commands just because the file has the same extension. Use your distribution’s package manager and check the download page for compatibility. If there’s no build for your system, check whether AppImage’s runtime requirements are met.

AppImage: Make it executable and launch as a regular user

AppImage is usually distributed as a single file and doesn’t need to be registered in the system package database like a DEB or RPM. However, it still depends on the system environment: CPU architecture, graphical session, runtime libraries, and—depending on the build—FUSE can all affect whether it launches. Store the file in a local directory where your user has read and execute permissions.

read -r -p "Enter the path to the downloaded AppImage file: " app
if [ -f "$app" ]; then
  app=$(realpath -e -- "$app") && chmod +x -- "$app" && "$app"
else
  printf '%s\n' "File not found. Check the path and try again."
fi

chmod +x adds execute permission to the file; it doesn’t install dependencies or change the CPU architecture. Connecting commands with && stops the launch if setting permissions fails. Don’t use sudo to launch the app for everyday use: it may write user configuration to the administrator’s directory, leaving your regular account unable to access it.

Launching from a terminal keeps error output visible. If double-clicking doesn’t open a window, launch it as shown above and check the output before proceeding. Whether an AppImage creates a desktop shortcut depends on how it’s integrated. No app menu entry doesn’t necessarily mean it failed to launch; keep the file in its original location.

First launch: configure the app, then check traffic handling

After installing, check these separately: whether the app launches, whether the configuration is valid, and whether traffic is going through the proxy. Linux desktop proxy settings and an app’s own network behavior aren’t always the same: browsers may honor the desktop proxy, while some terminal programs don’t. A connected status on Home alone doesn’t prove that every process is using the same route.

  1. Launch the app

    Open Shadowrocket from the app menu or launch the AppImage file, then make sure Home loads. If the app hasn’t opened, troubleshoot installation or runtime library errors first; don’t rush to change your subscription.

  2. Import a configuration

    Get a subscription from your service provider and add it from Config → Subscribe. If you already have the parameters for a single server, go to Home → Add Server and enter them under the appropriate Type. A subscription and manually entered server details serve different purposes.

  3. Check the routing policy

    Select a server on Home and check the current Global Routing mode. If you use Config, also confirm that the active configuration and the policies referenced by its rules are present.

  4. Verify traffic handling

    After connecting, visit the same test address in the same browser and check the client’s connection log. If the browser appears in the log but the terminal doesn’t, check whether the terminal program is configured to use a proxy before blaming the installer.

If a terminal program needs a local proxy address, check the actual listening address, port, and protocol in the settings. Don’t guess the port or use an HTTP proxy port as SOCKS5. For local use only, listening on the loopback address is generally preferable to exposing the proxy to your LAN; don’t widen the listening scope just to troubleshoot.

Global Routing: Tell rule issues from connection issues by mode

The modes below describe Shadowrocket’s own Global Routing behavior, not installer formats. They determine how traffic that reaches the app is handled; they don’t make every Linux program follow the desktop proxy automatically. Change one setting at a time and record the results before and after.

Config

Recommended

Handle requests according to the active configuration’s rules and policies. DOMAIN-SUFFIX matches domain suffixes, IP-CIDR matches address ranges, GEOIP matches by IP location, and FINAL handles requests that don’t match earlier rules.

Best for: everyday use with a valid rules configuration

Proxy

Send requests that reach the client through the currently selected proxy policy. This helps isolate rule-based routing during testing. If Proxy works but Config doesn’t, check the rule order and policy references in Config.

Best for: temporarily checking the server and proxy route

Direct

Handle requests that reach the client as direct connections. This can serve as a comparison on the same network, but the result depends on that network and doesn’t by itself prove the server is configured correctly.

Best for: comparing the local network with the proxy route

Scene applies behavior according to configured scenes; it isn’t a fixed “proxy everything” switch. If you haven’t set up a scene, start with a clear baseline using Config, Proxy, or Direct. Configure automatic connections only after verifying a manual connection, so automatic behavior doesn’t complicate troubleshooting.

Common questions about installing, updating, and uninstalling

Installation completed, but why is there no window?

First check that you have an active graphical desktop session. For AppImage, launch it from a terminal using the actual path and keep the error output. For DEB or RPM, confirm the package manager completed the transaction, then launch the app from the desktop menu. A command-line-only remote session is not the same as a local graphical desktop.

Can I replace the installed app with a newly downloaded package?

Back up the active configuration in Config first and keep your subscription details safe. For DEB or RPM, install the new local package using the same package manager and let it handle the upgrade. For AppImage, quit the old process, save the new file, make it executable, and launch it to confirm it works.

Should I install all three formats?

Usually, one format is enough. Multiple copies can create duplicate menu entries and make it hard to tell which one is running. Before switching formats, quit the app and back up your configuration. Remove the old copy using the method it was installed with; don’t manually delete files from system package manager directories.

Which package name should I use to uninstall?

Don’t guess the package name from the downloaded filename. Query it with dpkg-deb -f "$pkg" Package for DEB or rpm -qp --queryformat '%{NAME}\n' "$pkg" for RPM; the variable should point to the corresponding installer file you kept. Then uninstall the package by its reported name in your system’s software manager.

The app opens, but subscription updates time out. What should I do?

First separate installation issues from network issues: check that the system clock is correct and the network is working, then make sure the subscription URL from your service provider is complete. Note the specific update error. Before sharing logs, remove tokens, server credentials, and other private information from any URLs.

To remove an AppImage, quit the app and delete the corresponding file. If you created a desktop entry separately, remove that entry too. For any package format, uninstalling the app and deleting user configuration aren’t always the same step. Before reinstalling or migrating, make sure your backup works, then decide whether to remove user data.

Download Shadowrocket