XRandr - Automatisch zwischen Display und Monitor umschalten
Ich benutze bevorzugt leichtgewichtige Window-Manager wie i3 oder awesome. Leider bedeutet dies unter Umständen auch, dass man etwas mehr Zeit bzw. Fleiß in die ein oder andere Komfortfunktion investieren muss, um diese nutzen zu können.
Bspw. bei der Nutzung eines Notebooks möchte man nach Möglichkeit zwischen mehreren Anzeigegeräten automatisch umschalten. Andernfalls müsste man das Gerät immer herunterfahren und nach einem Neustart entsprechend mit xrandr konfigurieren – von Hand natürlich! Nachdem mir das Ganze heute mehr als auf die Nerven ging, habe ich mir auf die „Schnelle“ ein kleines Skript geschrieben und führe dieses nun mittels Udev-Regel aus um automatisch umschalten zu können.
#!/bin/bash
DP2STATUS="$(cat /sys/class/drm/card0-DP-2/status)"
DP3STATUS="$(cat /sys/class/drm/card0-DP-3/status)"
export DISPLAY=:0.0
XAUTHORITY=/home/daniel/.Xauthority
#XAUTHORITY=/var/run/slim.auth
authtoken=$( xauth -f "${XAUTHORITY}" nlist | cut -d" " -f 9 );
xauth add $DISPLAY MIT-MAGIC-COOKIE-1 $authtoken
## get current display number from process list
# export DISPLAY=`ps aux | grep X | awk '$12 ~ /:[0-9]/ {print $12}'`
echo "changing" >> /tmp/dock
if [ "${DP2STATUS}" = disconnected ]
then
xrandr --output LVDS1 --auto --primary --output DP2 --off
elif [ "${DP2STATUS}" = connected ]
then
if [ "${DP3STATUS}" == disconnected ]
then
xrandr --output LVDS1 --off --output DP2 --primary --auto
else
xrandr --output DP2 --primary --auto
xrandr --output LVDS1 --off
xrandr --output DP3 --right-of DP2 --auto
fi
fi
/usr/bin/which nitrogen 1 &> /dev/null 2 &> /dev/null
if [ $? -eq 0 ]; then
nitrogen --restore
fi
Die dazugehörige Udev-Regel sieht folgendermaßen aus:
KERNEL=="card0", ACTION=="change", RUN+="/home/daniel/bin/monitor.sh"
Wichtig ist dabei, dass der Xauthority-Token und das Display exportiert werden, sonst geht es in die Hose. Natürlich sollten die Pfade, die Schnittstelle des Displays und eventuell die Grafikkarte entsprechend angepasst werden.