Skip to Content

XRandr - Automatisch zwischen Display und Monitor umschalten

Posted on 2 mins read

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.

xrandr Multi-Monitor Desktop http://en.wikipedia.org/wiki/Xinerama

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.