#!/bin/bash # Modified from: # https://gitlab.com/evlaV/steamdeck-kde-presets/-/blob/master/usr/bin/jupiter-plasma-bootstrap?ref_type=heads set -eo pipefail SYS_ID="$(cat /sys/devices/virtual/dmi/id/product_name)" if [[ "${XDG_SESSION_TYPE}" = "wayland" ]]; then if /usr/libexec/hwsupport/needs-left-rotation || /usr/libexec/hwsupport/needs-right-rotation; then # Try to wait for kscreen to be ready. This was mostly a hack to try to make the below bug not happen, but I'm afraid # to remove it because this weird bug has caused hours of grief. i=0 while (( ++i < 5 )) && ! kscreen-console outputs; do sleep 5 done # Then try to fix the config # # There is some fun/insane bug where if kscreen hasn't evaluated connected displays yet, doing that at the same time as # asking it to set the rotation causes it to racily either ignore you, or somehow do two modesets in such a way as to # break the amdgpu driver and disable the screen for this X11 session. Really. Wayland seems fine. # # But if you ask for a nonsense rotation, it will guarantee it has evaluated the new display and added it to the config # (before failing because foo isn't a rotation). Ha-ha, software! kscreen-doctor output.eDP-1.rotation.foo || true kscreen-doctor output.eDP.rotation.foo || true # In wayland mode the display is named after some EDID identifier and not the output, but "1" works there, and hopefully # is the internal screen oh boy. # Try to wait for kscreen to be ready i=0 while (( ++i < 5 )) && ! kscreen-console json; do sleep 5 done # Then try to fix the config if /usr/libexec/hwsupport/needs-right-rotation; then kscreen-doctor output.eDP.rotation.right \ || kscreen-doctor output.eDP-1.rotation.right \ || true elif /usr/libexec/hwsupport/needs-left-rotation; then kscreen-doctor output.eDP.rotation.left \ || kscreen-doctor output.eDP-1.rotation.left \ || true fi fi fi