Skip to content

Installing on Steam Deck

Wayne Heaney edited this page Oct 13, 2024 · 3 revisions

Installing Breezy Gnome desktop on Steam Deck (contributed by Bill Burdick)

These instructions require making your filesystem read-write. Efforts have been made to use distrobox but so far have not succeeded. Please contribute if you have success with that!

Make sure you're running on at least 3.6, which might require switching to the beta or alpha channel

NOTE: gnome-shell --nested didn't work for me on 3.5 but it did when I updated to 3.6.

I was getting errors:

Unrecognized option: -byteswappedclients

(with lots of other text).

Seems related to this bug: https://bugs-devel.debian.org/cgi-bin/bugreport.cgi?bug=1050642 and SteamOS 3.5 has mutter 44.2

If your root is not already writeable, make it so

sudo steamos-readonly disable

If your pacman environment is not already initialized, make it so

sudo pacman-key --init
sudo pacman-key --populate archlinux
sudo pacman-key --populate holo

make sure /usr/share is in your XDG_DATA_DIRS variable

if not, add :/usr/share to it

load depends for breezy

sudo pacman -S --needed base-devel git
# existing packages are reloaded here in order to install their header files
sudo pacman -S glibc linux-api-headers systemd-libs openssl libevdev libusb json-c curl hidapi python python-pydbus 'gnome-shell>=45.0' python-yaml

Install xr-driver-git

work=$(mktemp -d)
cd $work
mkdir xr-driver
cd xr-driver
curl 'https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=xr-driver-git' > PKGBUILD
curl 'https://aur.archlinux.org/cgit/aur.git/plain/hooks.install?h=xr-driver-git' > hooks.install
makepkg -si

Install breezy-desktop-gnome-git

cd $work
mkdir breezy
cd breezy
curl 'https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=breezy-desktop-gnome-git' > PKGBUILD
makepkg -si

Continue with wheaney's setup instructions

Instructions

A note on wide-screen mode with Viture Pro glasses (and possibly others?)

Sometimes the mouse is constrained to a 1920-pixel region in the middle of the screen. If this occurs, you can try the following steps:

  1. Quit Breezy,
  2. Put glasses into side-by-side mode -- a long press on the darkening button will do this on the Viture Pro,
  3. Launch Breezy with double-width,
MUTTER_DEBUG_DUMMY_MODE_SPECS='3840x1080@60' exec dbus-run-session -- gnome-shell --nested
  1. Make sure you have "wide screen" checked in Breezy settings.

Thanks to TTachyon on Reddit for some very important info

https://www.reddit.com/r/SteamDeck/comments/t92ozw/for_compiling_c_code

Docks

My Steam Deck dock does not support displayport alt mode on any of its ports (except the one that goes into the deck of course). There are a few docks out there that do, but not many. If you need to use a third party dock with your glasses, make sure it has a port with the displayport alt mode symbol

like image or image

For reference, I'm using the Inateck 10-in-1 USB-C hub (Amazon link)

More setup stuff

My current breezy script

This starts the breezy desktop in a nested gnome-shell and, after you activate the window (like by clicking on it) and, provided you have the window rule below, this will full-screen the window, remove the title bar, and make it ignore KDE desktop keyboard shortcuts so that the desktop can fully function as a gnome desktop.

This expects the classify-gnome-shell script to be in your path.

Note the last line of the script is if you need a double size window for wide screen mode. Wheany suggested trying this and it worked for me.

#!/bin/sh
clssify-gnome-shell&
MUTTER_DEBUG_DUMMY_MODE_SPECS='1920x1080@60' exec dbus-run-session -- gnome-shell --nested
#MUTTER_DEBUG_DUMMY_MODE_SPECS='3840x1080@60' exec dbus-run-session -- gnome-shell --nested

My current classify-gnome-shell script

This script waits for you to make the nested gnome shell active (like by clicking on it) and then puts a "gnome-shell" class onto the window (which has no class for some reason). I have a KDE window rule that needs the window to have the "gnome-shell" class.

#!/bin/sh
while true; do
    id=$(xdotool getactivewindow)
    if xprop -id $id | grep -q "WM_NAME.*gnome-shell"; then
        xdotool getactivewindow set_window --class gnome-shell --classname gnome-shell
        echo -e "\n\nGNOME-SHELL: $id\n\n"
        break
    fi
    sleep 0.25
done

KDE Window rule

This rule full-screens the window, removes the title bar, and makes it ignore KEY desktop shortcuts (so you can use the super key in your nested gnome session).

[gnome-shell nested]
Description=gnome-shell nested
above=true
disableglobalshortcuts=true
disableglobalshortcutsrule=2
fullscreen=true
fullscreenrule=2
noborder=true
noborderrule=2
skiptaskbar=true
title=Steam Keyboard
type=16
wmclass=gnome-shell gnome-shell
wmclasscomplete=true
wmclassmatch=1

To install the rule

  1. copy the above text into a file
  2. go to KDE settings and click on Window Management

image

  1. click on Window Rules and then click the Import button to import the rules

image

xwayland script

I currently use Emacs remotely for my work (because the emacs lsp glue code doesn't currently support tramp) and I've found that, even though this is not an ideal setup, running X inside of gnome-shell -nested inside of the X on the desktop actually does work. So, until we can run Wayland on the Steam Deck desktop and that language server code works within tramp, this is what I'll be using for my work. Aaaand, it's a full-screen window for now, until I can get rootless working.

This runs the awesome window manager which, just to make things even more indirect, I have installed inside an Ubuntu distrobox so I can avoid dirtying the Steam Deck's root any more than I need to. So I run xwayland in distrobox. When you quit awesome, it kills xwayland for you.

So feel free to use this but you have been warned...

#!/bin/sh
Xwayland :3 -fullscreen -geometry 1920x1080&
#Xwayland :3 -fullscreen -geometry 3840x1080&
pid=$!
sleep 2
echo PID=$pid
export DISPLAY=:3
awesome
kill -2 $pid