Play Steamdeck vertically
Here is the method I play the Steam Deck vertically with JoyCons, mostly for emulators but also mostly work for other games.
1. HW part
Updates on 2/23/2025: also created a 3D printable grip model. Refer to below link.
https://makerworld.com/zh/models/1140868#profileId-1143225
The key accessary is the 3D printed part for Joycon attachment, which I bought it from Taoabo (China ver. Aliexpress).
https://item.taobao.com/item.htm?abbucket=14&id=706851826742&ns=1&priceTId=214780e317154338077877668e1449&spm=a21n57.1.item.9.4635523cCWRzUt
We also need a stand to "hook" the Joycons finally to the Steamdeck, which I happened to have one disparted from the "Back Cover Protective Case" I bough previous (what I need was just the cover lol).
At the end the combined accessory together with the Joycons looks like this.
2. SW part
Well once we complete the HW part it is really OK to go, but just very inconvenient due to several reasons:
- Joycons need to be paired after every restart (Linux or Joycon limitation?)
- Steamdeck controllers buttons may be unexpectedly pushed, affecting the game play
- Too many steps to rotate the screen
- Not all the game can start properly with vertical resolution
To make our live easier, surely we can make some bash script to automate the jobs, and below are some key commands to be used.
Surely first go inside Desktop Mode.
Joycon Autoconnection
#!/bin/bash
# Replace below MAC with those of your Joycon L and Joycon R !!
bluetoothctl -- remove DC:68:EB:54:41:D6
bluetoothctl -- remove DC:68:EB:54:37:10
while true
do
bluetoothctl --timeout 3 scan on
# Replace below MAC with those of your Joycon L!!
bluetoothctl -- connect DC:68:EB:54:41:D6
retValL=$?
# Replace below MAC with those of your Joycon R !!
bluetoothctl -- connect DC:68:EB:54:37:10
retValR=$?
if [ $retValL -ne 0 ] || [ $retValR -ne 0 ]; then
echo "Error"
else
break
fi
done
Steamdeck Controller Disable
#!/bin/bash
# Replace below 12345678 with your user password !!
echo 12345678 | sudo -S sh -c "echo '3-3:1.0' > /sys/bus/usb/drivers/usbhid/unbind"
echo 12345678 | sudo -S sh -c "echo '3-3:1.1' > /sys/bus/usb/drivers/usbhid/unbind"
echo 12345678 | sudo -S sh -c "echo '3-3:1.2' > /sys/bus/usb/drivers/usbhid/unbind"
Steamdeck Controller Enable
#!/bin/bash
# Replace below 12345678 with your user password !!
echo 12345678 | sudo -S sh -c "echo '3-3:1.0' > /sys/bus/usb/drivers/usbhid/bind"
echo 12345678 | sudo -S sh -c "echo '3-3:1.1' > /sys/bus/usb/drivers/usbhid/bind"
echo 12345678 | sudo -S sh -c "echo '3-3:1.2' > /sys/bus/usb/drivers/usbhid/bind"
Steamdeck Screen Vertical
#!/bin/bash
xrandr --output eDP --mode 800x1280 --pos 0x0 --rotate inverted
# Steamdeck Screen Horizontal
#!/bin/bash
xrandr --output eDP --mode 800x1280 --pos 0x0 --rotate right
Run game properly in Vertical mode
For emulators this step can be skipped, but for Windows games, many of them cannot be started in vertical resolution.
Tested Gamescope but it is not always working, so turn around to use KWin/Wayland.
#!/bin/bash
export $(dbus-launch)
kwin_wayland --xwayland --width 1280 --height 800 --scale 0.625 &
Then we can restart Steam in Big picture mode with below script.
#!/bin/bash
killall steam
sleep 5
ps cax | grep steam
retval=$?t
while 1
do
if [ $retval -eq 0 ]
then
echo "Steam still alive."
else
break
fi
done
sleep 5
DISPLAY=:1 steam -bigpicture