diff --git a/.github/workflows/mkdocs.yml b/.github/workflows/mkdocs.yml new file mode 100644 index 0000000..fb10bd5 --- /dev/null +++ b/.github/workflows/mkdocs.yml @@ -0,0 +1,31 @@ +name: mkdocs + +on: + push: + branches: + - master + +permissions: + contents: write + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Configure Git Credentials + run: | + git config user.name github-actions[bot] + git config user.email 41898282+github-actions[bot]@users.noreply.github.com + - uses: actions/setup-python@v5 + with: + python-version: 3.x + - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV + - uses: actions/cache@v4 + with: + key: mkdocs-material-${{ env.cache_id }} + path: .cache + restore-keys: | + mkdocs-material- + - run: pip install mkdocs-material + - run: mkdocs gh-deploy --force diff --git a/README.md b/README.md index f7e0692..150f0aa 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Discord RPC Bridge for Wine -![GitHub](https://img.shields.io/github/license/EnderIce2/rpc-bridge) -![GitHub All Releases](https://img.shields.io/github/downloads/EnderIce2/rpc-bridge/total) -![GitHub release (latest by date)](https://img.shields.io/github/v/release/EnderIce2/rpc-bridge) +![GitHub License](https://img.shields.io/github/license/EnderIce2/rpc-bridge?style=for-the-badge) +![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/EnderIce2/rpc-bridge/total?style=for-the-badge) +![GitHub Release](https://img.shields.io/github/v/release/EnderIce2/rpc-bridge?style=for-the-badge) Simple bridge that allows you to use Discord Rich Presence with Wine games/software. @@ -12,96 +12,47 @@ This bridge takes advantage of the Windows service implementation in Wine, elimi --- -## Table of Contents - -- [Discord RPC Bridge for Wine](#discord-rpc-bridge-for-wine) - - [Table of Contents](#table-of-contents) - - [Installation \& Usage](#installation--usage) - - [Installing inside a prefix](#installing-inside-a-prefix) - - [Wine (~/.wine)](#wine-wine) - - [Lutris](#lutris) - - [Steam](#steam) - - [If you use Flatpak](#if-you-use-flatpak) - - [Run without installing the service](#run-without-installing-the-service) - - [About macOS](#about-macos) - - [Compiling from source](#compiling-from-source) - - [Command line arguments](#command-line-arguments) - - [Debugging](#debugging) - - [Demo](#demo) - - [Credits](#credits) - ## Installation & Usage -Installation will place `bridge.exe` to `C:\bridge.exe` (if it's not already there) and create a Windows service. This service will automatically start when the prefix is used. - -If you prefer not to use the service for any reason, please refer to the [Run without installing the service](#run-without-installing-the-service) section. +Installation will copy itself to `C:\windows\bridge.exe` and create a Windows service. +Logs are stored in `C:\windows\logs\bridge.log`. #### Installing inside a prefix ##### Wine (~/.wine) -- Open terminal in `build` -- Run `$ wine cmd` and `C:\> install.bat` - - ![wine install](imgs/wine_install.gif) -- To remove, run `C:\> remove.bat` - - ![wine remove](imgs/wine_remove.gif) -- Note: Copying files are not required here. +- Double click `bridge.exe` and click `Install`. + - ![gui](docs/assets/gui.png) +- To remove, the same process can be followed, but click `Remove` instead. ##### Lutris -- Right click on the game and select `Browse files` - - ![lutris browse](imgs/lutris_browse.gif) -- Copy contents of `build` to the game's prefix `drive_c` - - ![lutris copy](imgs/lutris_copy.gif) -- To install open the console - - ![lutris console](imgs/lutris_console.gif) -- And run `C:\> install.bat` (make sure you are in `C:\`!) - - ![lutris install](imgs/lutris_install.gif) +- Click on a game and select `Run EXE inside Wine prefix`. + - ![lutris](docs/assets/lutris.png) +- The same process can be followed as in Wine. ##### Steam -- Open [Protontricks](https://github.com/Matoking/protontricks) and select the game you want to install the bridge to -- Select `Select the default wineprefix` -- Select `Browse files` and copy contents of `build` to the game's prefix `drive_c` -- Select `Run a Wine cmd shell` and run `C:\> install.bat` - - If you are not in `C:\`, type `c:` and press enter -- ![protontricks](imgs/steam_protontricks.png) +- Right click on the game and select `Properties`. +- Under `Set Launch Options`, add the following: + - ![bridge.sh](docs/assets/steam_script.png "Set Launch Options to the path of the bridge.sh") +- The `bridge.sh` script must be in the same directory as `bridge.exe`. #### If you use Flatpak -- If you are running Steam, Lutris, etc. in a Flatpak, you will need to allow the bridge to access the `/run/user/1000/discord-ipc-0` file. +- If you are running Steam, Lutris, etc in a Flatpak, you will need to allow the bridge to access the `/run/user/1000/discord-ipc-0` file. - ##### By using [Flatseal](https://flathub.org/apps/details/com.github.tchx84.Flatseal) - Add `xdg-run/discord-ipc-0` under `Filesystems` category - - ![flatseal](imgs/flatseal_permission.png) + - ![flatseal](docs/assets/flatseal_permission.png) - ##### By using the terminal - Per application - `flatpak override --filesystem=xdg-run/discord-ipc-0 ` - Globally - `flatpak override --user --filesystem=xdg-run/discord-ipc-0` -## Run without installing the service +## macOS -If you prefer not to use the service, you can manually run `bridge.exe` within the Wine prefix. -This method is compatible with both Wine and Lutris. - -In Lutris, you can achieve this by adding the path to `bridge.exe` in the `Executable` field under `Game options`. In `Arguments` field, be sure to include the _Windows_ path to the game's executable. -Example: -- Without bridge: - - Executable `/mnt/games/lutris/league-of-legends/drive_c/Riot Games/League of Legends/LeagueClient.exe` - - Arguments `--locale=en_US --launch-product=league_of_legends --launch-patchline=live` -- With bridge: - - Executable `/mnt/games/lutris/league-of-legends/drive_c/bridge.exe` - - Arguments `"C:\Riot Games\League of Legends\LeagueClient.exe" --locale=en_US --launch-product=league_of_legends --launch-patchline=live` - -In Wine, all you need to do is run `bridge.exe`. - -- When running the program manually without providing any arguments, it will simply initiate the bridge and wait indefinitely until it's closed. - -## About macOS - -The bridge works similarly on macOS as it does on Linux, but it can't be registered as a service due to TMPDIR limitations. macOS users must manually run `bridge.exe` when needed. - -To run `bridge.exe` on macOS, navigate to its directory in the terminal and execute `wine bridge.exe`. (or double click it in the Finder) +On macOS, follow [these instructions](https://enderice2.github.io/rpc-bridge/installation.html#macos). ## Compiling from source @@ -109,24 +60,6 @@ To run `bridge.exe` on macOS, navigate to its directory in the terminal and exec - Open a terminal in the directory that contains this file and run `make`. - The compiled executable will be located in `build/bridge.exe`. -## Command line arguments - -- `--install` - Installs the service -- `--remove` - Removes the service -- `--service` - Reserved for the service -- `[Target Executable]` - Starts the bridge and the game - - Example: `bridge.exe "C:\Riot Games\League of Legends\LeagueClient.exe" --locale=en_US --launch-product=league_of_legends --launch-patchline=live` - - Note: The game executable must be enclosed in quotes. The rest of the arguments are passed to the target executable. - -## Debugging - -The bridge will write the logs in `C:\bridge.log`. - -## Demo - -![League of Legends running under Wine](imgs/lutris_lol.png) -![Among Us running from Steam](imgs/steam_amongus.png) - ## Credits This project is inspired by [wine-discord-ipc-bridge](https://github.com/0e4ef622/wine-discord-ipc-bridge). diff --git a/imgs/flatseal_permission.png b/docs/assets/flatseal_permission.png similarity index 100% rename from imgs/flatseal_permission.png rename to docs/assets/flatseal_permission.png diff --git a/docs/assets/gui.png b/docs/assets/gui.png new file mode 100644 index 0000000..6f7270f Binary files /dev/null and b/docs/assets/gui.png differ diff --git a/docs/assets/lutris.png b/docs/assets/lutris.png new file mode 100644 index 0000000..d14f482 Binary files /dev/null and b/docs/assets/lutris.png differ diff --git a/imgs/lutris_lol.png b/docs/assets/lutris_lol.png similarity index 100% rename from imgs/lutris_lol.png rename to docs/assets/lutris_lol.png diff --git a/imgs/steam_amongus.png b/docs/assets/steam_amongus.png similarity index 100% rename from imgs/steam_amongus.png rename to docs/assets/steam_amongus.png diff --git a/imgs/steam_protontricks.png b/docs/assets/steam_protontricks.png similarity index 100% rename from imgs/steam_protontricks.png rename to docs/assets/steam_protontricks.png diff --git a/docs/assets/steam_script.png b/docs/assets/steam_script.png new file mode 100644 index 0000000..2c5ca16 Binary files /dev/null and b/docs/assets/steam_script.png differ diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..316e478 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,33 @@ +# Discord RPC Bridge for Wine + +![GitHub License](https://img.shields.io/github/license/EnderIce2/rpc-bridge?style=for-the-badge) +![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/EnderIce2/rpc-bridge/total?style=for-the-badge) +![GitHub Release](https://img.shields.io/github/v/release/EnderIce2/rpc-bridge?style=for-the-badge) +![GitHub Pre-Release](https://img.shields.io/github/v/release/EnderIce2/rpc-bridge?include_prereleases&style=for-the-badge&label=pre-release) + +Simple bridge that allows you to use Discord Rich Presence with Wine games/software on Linux/macOS. + +[Download latest release](https://github.com/EnderIce2/rpc-bridge/releases/latest/download/bridge.zip "Recommended"){ .md-button .md-button--primary } +[Download latest pre-release](https://github.com/EnderIce2/rpc-bridge/releases "Unstable builds with experimental features"){ .md-button } + + +Works by running a small program in the background that creates a [named pipe](https://learn.microsoft.com/en-us/windows/win32/ipc/named-pipes) `\\.\pipe\discord-ipc-0` inside the prefix and forwards all data to the pipe `/run/user/1000/discord-ipc-0`. + +This bridge takes advantage of the Windows service implementation in Wine, eliminating the need to run it manually. + +These docs are for the latest stable release. +For v1.0, see [the original README](https://github.com/EnderIce2/rpc-bridge/blob/v1.0/README.md). + +--- + +## Examples + +![lol](assets/lutris_lol.png "League Of Legends running under Wine using Lutris"){ width="600" } + +![among us](assets/steam_amongus.png "Among Us on Steam"){ width="600" } + +## Credits + +This project is inspired by [wine-discord-ipc-bridge](https://github.com/0e4ef622/wine-discord-ipc-bridge). + +--- diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 0000000..c0f36cc --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,109 @@ +# Installation + +Installation will copy itself to `C:\windows\bridge.exe` and create a Windows service. +Logs are stored in `C:\windows\logs\bridge.log`. + +## Installing inside a prefix + +### Wine (~/.wine) + +- Double click `bridge.exe` and click `Install`. + - ![gui](assets/gui.png "rpc-bridge GUI") +- To remove, the same process can be followed, but click `Remove` instead. + +### Lutris + +- Click on a game and select `Run EXE inside Wine prefix`. + - ![lutris](assets/lutris.png "Lutris") +- The same process can be followed as in Wine. + +### Steam + +There are two ways to install the bridge on Steam. + +#### Using bridge.sh[^1] + +This method is recommended because it's easier to manage. + +- Right click on the game and select `Properties`. +- Under `Set Launch Options`, add the following: + - ![bridge.sh](assets/steam_script.png "Set Launch Options to the path of the bridge.sh") +Of course, you need to replace `/path/to/bridge.sh` with the actual path to the script. + +!!! info "Note" + + `bridge.sh` must be in the same directory as `bridge.exe`. + +#### Using Protontricks + +- Open [Protontricks](https://github.com/Matoking/protontricks) and select the game you want to install the bridge to. +- Select `Select the default wineprefix` +- Select `Browse files` and copy contents of `build` to the game's prefix `drive_c` +- Select `Run a Wine cmd shell` and run `C:\> install.bat` + - If you are not in `C:\`, type `c:` and press enter + +![protontricks](assets/steam_protontricks.png "If use have the option for 'Run an arbitrary executable (.exe/.msi/.msu), use it instead!") + +!!! warning "If you use Flatpak" + + If you are running Steam, Lutris, etc in a Flatpak, you will need to allow the bridge to access the `/run/user/1000/discord-ipc-0` file. + + You can do this by using [Flatseal](https://flathub.org/apps/details/com.github.tchx84.Flatseal) or the terminal. + + === "Flatseal" + + Add `xdg-run/discord-ipc-0` under `Filesystems` category + ![flatseal](assets/flatseal_permission.png) + + === "Terminal" + + - Per application + - `flatpak override --filesystem=xdg-run/discord-ipc-0 ` + - Globally + - `flatpak override --user --filesystem=xdg-run/discord-ipc-0` + +## macOS + +If using the default Wine prefix (`~/.wine`), you can follow the same steps as in Wine. + +Registering as a service [is not supported](https://github.com/EnderIce2/rpc-bridge/issues/1#issuecomment-2103423242 "Bridge can't get $TMPDIR unless is set with --rpc. See note below"). + +!!! info "Note" + + Since macOS doesn't have `/proc/self/environ` and `$TMPDIR` is neither always set nor the same after reboots, so you will need to [add `--rpc "$TMPDIR"` to the `bridge.exe` arguments](https://github.com/EnderIce2/rpc-bridge/issues/1#issuecomment-2104797235). + If you don't encounter any issues, you can ignore this step. + +## Run without installing the service + +If you prefer not to use the service, you can manually run `bridge.exe` within the Wine prefix. +This method is compatible with both Wine and Lutris. + +In Lutris, you can achieve this by adding the path to `bridge.exe` in the `Executable` field under `Game options`. In `Arguments` field, be sure to include the _Windows_ path to the game's executable. + +=== "Without bridge" + + ``` + Executable + /mnt/games/lutris/league-of-legends/drive_c/Riot Games/League of Legends/LeagueClient.exe + Arguments + --locale=en_US --launch-product=league_of_legends --launch-patchline=live + ``` + +=== "With bridge" + + ``` + Executable + /mnt/games/lutris/league-of-legends/drive_c/bridge.exe + Arguments + "C:\Riot Games\League of Legends\LeagueClient.exe" --locale=en_US --launch-product=league_of_legends --launch-patchline=live + ``` + +In Wine, all you need to do is run `bridge.exe` and select `Start`. + +## Compiling from source + +- Install the `wine`, `x86_64-w64-mingw32-gcc` and `make` packages. +- Open a terminal in the directory that contains this file and run `make`. +- The compiled executable will be located in `build/bridge.exe`. + +[^1]: As requested [here](https://github.com/EnderIce2/rpc-bridge/issues/2). diff --git a/docs/usage.md b/docs/usage.md new file mode 100644 index 0000000..cd63fe2 --- /dev/null +++ b/docs/usage.md @@ -0,0 +1,32 @@ +# Usage + +## GUI + +- When running the program manually without providing any arguments it will show a GUI. +![gui](assets/gui.png "rpc-bridge GUI") +- `Start` will start the service without installing itself. +- `Install` will install the service. +- `Remove` will uninstall the service. + +## Commands + +- `--help` Show help message + - This will show the help message + +- `--install` Install the service + - This will copy the binary to `C:\windows\bridge.exe` and register it as a service + +- `--uninstall` Uninstall the service + - This will remove the service and delete `C:\windows\bridge.exe` + +- `--steam` Reserved for Steam + - This will start the service and exit (used with `bridge.sh`) + +- `--no-service` Do not run as service + - (only for `--steam`) + +- `--service` Reserved for service + - Reserved + +- `--rpc ` Set RPC_PATH environment variable + - This is used to specify the directory where `discord-ipc-0` is located \ No newline at end of file diff --git a/imgs/lutris_browse.gif b/imgs/lutris_browse.gif deleted file mode 100644 index c008170..0000000 Binary files a/imgs/lutris_browse.gif and /dev/null differ diff --git a/imgs/lutris_console.gif b/imgs/lutris_console.gif deleted file mode 100644 index 7e05393..0000000 Binary files a/imgs/lutris_console.gif and /dev/null differ diff --git a/imgs/lutris_copy.gif b/imgs/lutris_copy.gif deleted file mode 100644 index 61c9707..0000000 Binary files a/imgs/lutris_copy.gif and /dev/null differ diff --git a/imgs/lutris_install.gif b/imgs/lutris_install.gif deleted file mode 100644 index 8cb56ab..0000000 Binary files a/imgs/lutris_install.gif and /dev/null differ diff --git a/imgs/wine_install.gif b/imgs/wine_install.gif deleted file mode 100644 index d6de19a..0000000 Binary files a/imgs/wine_install.gif and /dev/null differ diff --git a/imgs/wine_remove.gif b/imgs/wine_remove.gif deleted file mode 100644 index 77ddfff..0000000 Binary files a/imgs/wine_remove.gif and /dev/null differ diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..7ad0d4e --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,75 @@ +site_name: rpc-bridge +repo_url: https://github.com/EnderIce2/rpc-bridge +repo_name: EnderIce2/rpc-bridge +theme: + name: material + features: + - content.code.copy + - content.tabs.link + - navigation.tabs + - navigation.top + - navigation.footer + - toc.integrate + - content.tooltips + palette: + - media: "(prefers-color-scheme)" + toggle: + icon: material/weather-sunny + name: Switch to light mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: black + accent: indigo + toggle: + icon: material/brightness-4 + name: Switch to system preference + - media: "(prefers-color-scheme: light)" + scheme: default + primary: indigo + accent: indigo + toggle: + icon: material/brightness-7 + name: Switch to dark mode + font: + text: Roboto + code: Roboto Mono + favicon: assets/favicon.png + icon: + logo: logo + admonition: + note: octicons/tag-16 + abstract: octicons/checklist-16 + info: octicons/info-16 + tip: octicons/squirrel-16 + success: octicons/check-16 + question: octicons/question-16 + warning: octicons/alert-16 + failure: octicons/x-circle-16 + danger: octicons/zap-16 + bug: octicons/bug-16 + example: octicons/beaker-16 + quote: octicons/quote-16 +markdown_extensions: + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - admonition + - pymdownx.details + - pymdownx.inlinehilite + - pymdownx.snippets + - footnotes + - attr_list + - pymdownx.critic + - pymdownx.caret + - pymdownx.keys + - pymdownx.mark + - pymdownx.tilde + - pymdownx.tabbed: + alternate_style: true +plugins: + - offline +nav: + - Home: index.md + - Installation: installation.md + - Usage: usage.md