Skip to content

Instantly share code, notes, and snippets.

@BlinkyStitt
Last active December 29, 2022 20:40
Show Gist options
  • Save BlinkyStitt/a654e619e29cf904e0887e4e83d8427e to your computer and use it in GitHub Desktop.
Save BlinkyStitt/a654e619e29cf904e0887e4e83d8427e to your computer and use it in GitHub Desktop.
Setting up your SteamDeck with EmuDeck

Optional

Required

  • A keyboard and mouse connected to the steam deck. Using the joysticks, track pad, and on-screen keyboard is way too slow and error-prone. See "Notes on USB devices and Accessories" at the bottom of this article for my recommendations.
  • A micro SD card. See "Notes on USB devices and Accessories" at the bottom of this article for my recommendations.

On a desktop or laptop

  1. Install and open Syncthing
  2. Follow SyncThing’s initial setup instructions.
  • I did not document these when I did it, but I don’t think it was very complicated.
  • “Local discovery” is useful.
  • Make a note of your long "device identification"
  • I have it launch on login, but that isn’t necessary
  1. Click “Add Remote Device” (do not check “introducer”) and input my device identification codes (shared separately)
  2. Message me your Syncthing device identification code. Since you’ve added my devices already, sending me just the short 6 character version is enough.

On your Steam Deck in the Steam UI

  1. SD Cards need to be ext4 (or btrfs) to work, so you probably need to format your SD Card.
  • Settings > System > Format SD Card

On your Steam Deck in desktop mode

  1. Use the “discover” app to install “syncthing-gtk”
  2. Make sure that there is no syncthing running on your system. Even if you closed the Syncthing window it still runs in the background.
  • Launch Syncthing GTK, select the cog icon, select "Shutdown Daemon", select "quit".
  1. Run a terminal command:
mkdir -p /home/deck/.config/systemd/user/
  1. Use your favorite editor (vi?) to create /home/deck/.config/systemd/user/syncthing.service (see the file contents at the bottom of these instructions)
  2. Run more terminal commands. I recommend opening this page on the deck and copy pasting, rather than typing these out manually:
  sed -i 's/<address>127\.0\.0\.1:8080<\/address>/<address>127.0.0.1:8384<\/address>/' ~/.var/app/me.kozec.syncthingtk/config/syncthing/config.xml
  systemctl --user enable syncthing
systemctl --user start syncthing
  1. Open “Syncthing GTK” and do the initial setup.
  2. In Syncthing, select “Add Remote Device”
    • Use the code saved earlier to add at least your own computer, but you can also add my codes.
    • If you enabled “local discovery” during the initial setup, you should see your main computer’s identification code without needing to input it manually.
    • Make a note of your long "device identification"
    • If you add mine, be sure to send me the short device identification code so I can approve it.
  3. Install Emu Deck
    • Follow these thorough official written or video instructions.
    • I mostly used the default/recommended options.
    • I definitely recommend installing to the sd card. The oldest games are so small that installing to the internal drive would have been fine, but PS2 games and anything newer are often multiple gigabytes. The read and write speed is not super fast which sucks during this initial setup, but doesn't matter too much when playing the games.
    • The “BIOS and ROMs” section will be handled by my SyncThing directories
    • Because I have so many games, I use “EmulationStation DE” instead of “Steam ROM Manager”.
      • “Steam ROM Manager” puts all the ROMs in the main steam app “Collection”. You could use “Steam ROM Manager” to put just a few games into the main app, but I haven’t done that.

Once I accept your SyncThing connection, on your computer

  1. Open Syncthing to accept the folders I’m sending you. They should all show up at the top of the SyncThing web page with confirm/reject buttons.
    • “EmuDeck ROMs” can sync to anywhere you want. I did ~/Steam Deck/EmuDeck ROMs
    • “EmuDeck bios” can sync to anywhere you want. I did ~/Steam Deck/EmuDeck bios
    • “EmuDeck hdpacks” can sync to anywhere you want. I did ~/Steam Deck/EmuDeck hdpacks
    • I think that is all you need to sync. Your saved games will be separate from mine.
  2. Click “Add Remote Device” (do not check “introducer”) and input your steam deck's device identification code

Once I accept your SyncThing connection, on your SteamDeck in Desktop mode

  1. Open SyncThing to accept the folders I’m sending you. They should all show up at the top of the SyncThing web page with confirm/reject buttons.
    • “EmuDeck ROMs” should sync to /run/media/mmcblk0p1/Emulation/roms
    • “EmuDeck bios” should sync to /run/media/mmcblk0p1/Emulation/bios
    • “EmuDeck hdpacks” should sync to /run/media/mmcblk0p1/Emulation/hdpacks
    • You can add the other directories ("saves", "storage", "tools") and share them with yourself as an easy way to back them up.

Success!

You did it! Once SyncThing finishes syncing all the files (this can take a while), you are ready to play! On the Steam Deck, "Return to Gaming Mode" and then

Notes on Syncthing

  • You will have shared write access to these folders, so please don’t delete things in them.
  • Wait a while for SyncThing to copy everything over. You can watch the progress in the webpage for it.
  • Once SyncThing is done, you should have a lot of games to choose from.

Notes on Updates

  • Most of what EmuDeck set up will be upgraded through the "Discover" app
  • Run the "EmuDeck" application to automatically update it. Selecting "Quick Update" and hitting "OK" a few times is usually all that is needed.

Notes on Controls

  • For systems that have controllers shaped differently than the steam deck’s (Wii U, 3DS, etc.) you will need to enable a Steam Controller Profile so the hotkeys will work.
    • For example, on the 3DS: Start a 3DS game while in Steam Deck Game Mode, press the STEAM button > Controller Settings > Current Layout > Template > EmuDeck – Citra 3DS.
    • Note that this must be done only ONE TIME for each game. It will remember the profile after that.
    • The community profiles are sometimes better than the default, but it’s mostly personal preference.
    • I already had usb xbox 360 and genesis controllers that make it more comfortable to play most games. But if they are USB controllers, you will probably want a hub
    • If I didn’t already have the 360 controllers, I would buy https://www.8bitdo.com/ultimate-bluetooth-controller/.
    • I like using the original controller shape with most older games. 8bitdo has really nice genesis, nes, and super nes controllers.
  • Pressing the “Start and Select” buttons at the same time will quit the game. This is also the "save” button in the old Zelda games, so there needs to be a different layout chosen for that. I’m not sure of these steps as I’ve been too busy playing “Vampire Survivors”

Notes on Syncthing

  • I don’t think SyncThing will be very happy if you swap SD cards. I’m not sure how to make this better. It would be nice if the deck mounted sd cards in unique directories and if syncthing was smart enough to only run if the card was mounted, but I haven’t figured out how to do this. With a 1TB SD card, I don’t think it will really be a problem.

Notes on USB devices and accessories

[Unit]
Description=Syncthing
[Service]
Type=simple
ExecStart=flatpak run --command=syncthing me.kozec.syncthingtk
Restart=on-failure
RestartSec=1
SuccessExitStatus=3 4
[Install]
WantedBy=default.target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment