Skip to content

Build and install from source

kmicki edited this page Nov 8, 2023 · 11 revisions

Disclaimer - Steam OS Version

The build process doesn't work properly on stable SteamOS (3.4) anymore. The reinstallation of dependencies with missing files does not work because of expired GPG signatures in SteamOS 3.4 repositories.

To make build process possible on SteamOS 3.4 it is necessary to disable signature check for pacman. To do that, edit the file /etc/pacman.conf. Find the first line starting with SigLevel = and change it to:

SigLevel = Never

Then it will be possible to reinstall required dependencies with make prepare.

Beware: Changing pacman.conf file makes its content persistent over OS updates.

When dependencies are properly reinstalled, it is advised to restore the /etc/pacman.conf file. Simply editing it is not the best way, because it will leave pacman.conf contents persistent over OS updates. To properly restore the file, delete it from /etc overlay's upper directory:

rm /var/lib/overlays/etc/upper/pacman.conf

As of this day, above process is not needed for SteamOS 3.5 (current Beta version of SteamOS).

Build from source - quick instructions

Quick build from source and install instructions

If you haven't used sudo before, first run passwd to set a password.

If you haven't used make before, first run these commands.

sudo steamos-readonly disable
pacman -S --noconfirm make
sudo steamos-readonly enable

To build the server and install it as a service/update it, switch to desktop mode, open terminal and enter following commands in order:

cd
git clone https://github.com/kmicki/SteamDeckGyroDSU.git
cd SteamDeckGyroDSU
git checkout master
git pull

make install

After that, restart the system and the DSU server should be active.

To disable the server, use command:

systemctl --user disable sdgyrodsu.service
systemctl --user stop sdgyrodsu.service

To enable it again:

systemctl --user enable --now sdgyrodsu.service

Makefile

Makefile for SteamDeckGyroDSU contains several targets. The most useful are:

  • make or make release: Build the server. The binary executable will be located at: bin/release/sdgyrodsu

  • make debug: Build the server for debugging (the difference is no -O3 flag passed to g++). The binary: bin/debug/sdgyrodsu

    • both build commands invoke prepare target before building to make sure dependency header files are present (see Dependencies below). If any headers are missing, password will be requested (sudo) to reinstall dependency packages.
  • make createpkg: Create a binary package (pkgbin/SteamDeckGyroDSU.zip)

  • make install: Prepare, build and install as a service

  • make clean: Clean binaries and objects (bin/ and obj/ directories)

  • make cleanall: Clean all artifacts including binaries, objects and binary package

Build from source - detailed

The program is for Steam Deck specifically so instructions are for building on Steam Deck.

Steps below (reinstall dependencies+build+grant permissions+install as a service) are included in Makefile. Follow the steps if you don't want to use make.

Dependencies

Repository depends on libraries that are already installed in the Steam Deck's system. Unfortunately, even though the libraries are there, the header files are not, so they have to be reinstalled.

Those packages are:

  • gcc
  • glibc
  • linux-api-headers
  • ncurses
  • systemd-libs
  • hidapi

To do that:

sudo steamos-readonly disable
sudo pacman-key --init
sudo pacman-key --populate
sudo pacman -S --noconfirm gcc
sudo pacman -S --noconfirm glibc
sudo pacman -S --noconfirm linux-api-headers
sudo pacman -S --noconfirm ncurses
sudo pacman -S --noconfirm systemd-libs
sudo pacman -S --noconfirm hidapi
sudo steamos-readonly enable

As you see above, this requires disabling read only filesystem. It is necessary only to reinstall those packages. Building/installing/running a server is possible with read-only filesystem enabled.

Build

Build using following commands in a project's directory:

mkdir -p bin/release
g++ -std=c++2a $(find inc -type d -printf '-I %p\n') -O3 -g $(find src -type f -iregex '.*\.cpp' -printf '%p\n') -pthread -lncurses -lsystemd -lhidapi-hidraw -o bin/release/sdgyrodsu

Usage

If the server was installed using make install, it should be running as a service after system restart. Otherwise, see below. When program is running, the DSU (cemuhook protocol) server providing motion data is available at Deck's IP address and UDP port 26760.

Grant permissions (deprecated)

Granting following permissions is not needed for versions 2.0 and above

Skip this section unless you changed the data source to hiddev file in main.cpp by setting cUseHiddevFile = true.

Use following commands to create a new user group and add current user to the group and then grant that group permission to read from hiddev file of Steam Deck controls (run those in a repository's main directory):

sudo groupadd usbaccess
sudo gpasswd -a $USER usbaccess
sudo cp pkg/51-deck-controls.rules /etc/udev/rules.d/

Then restart the system.

Remark: Above command will fail when checked out source is from version 2.0 or above, because the .rules file is missing. The file can be obtained from source of version 1.16.

Install user service

If you want to run server automatically when Steam Deck is ON, install it as a service.

First prepare permissions as described in a previous section (service will be non-root).

Then run those commands from repository directory:

mkdir -p $HOME/sdgyrodsu
cp bin/sdgyrodsu $HOME/sdgyrodsu/
cp pkg/sdgyrodsu.service $HOME/.config/systemd/user/
systemctl --user enable --now sdgyrodsu.service

Run without service

You can use the server without installing a user service.

./bin/sdgyrodsu