Mahlzeit,
ich bin gerade dabei ein ThinkPad X200 zusammen mit der zugehörigen Ultrabase zu konfigurieren.
Ziel -> Beim docken soll ein xrandr Befehl ausgeführt werden.
Das Script dafür ist in den ersten Schritten fertig und funktioniert auch als normaler user (dem der X-Server gerader gehört).
Nun habe ich viel gelesen, dass xrandr nicht ohne Weiteres von root ausgeführt werden kann.
Es soll angeblich einen recht unschönen Hack geben, indem man $XAUTHORITY und $DISPLAY auf die korrekten werte setzt.
Leider funktioniert bei mir nichtmal das....
Führe ich xrandr als root ohne die Variablen aus, bekomme ich
can not open display
Ist ja auch logisch.
exportiere ich DISPLAY auf ":0", so wie es auch im user gesetzt ist, bekomme ich folgenden Fehler:
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 150 (RANDR)
Minor opcode of failed request: 7 (RRSetScreenSize)
Serial number of failed request: 36
Current serial number in output stream: 37
selbst wenn ich XAUTHORITY auf "/home/username/.Xauthority" setze, kommt der selbe Fehler...
Kann mir evtl. jemand sagen, wie ich xrandr von einem root-script starten kann?
Hier noch das Script:
#!/bin/bash
# wait for the dock state to change
# wait
sleep 0.5
# vars
DOCKSTATE="/sys/devices/platform/dock.0/docked"
LASTSTATE="/tmp/dockstate"
export XAUTHORITY=/home/<USER>/.Xauthority
export DISPLAY=:0
dock() {
xrandr --output HDMI2 --mode 1920x1200 --pos 1280x0 --rotate normal --output LVDS1 --mode 1280x800 --pos 0x400 --rotate normal
}
undock() {
xrandr --output HDMI2 --off --output LVDS1 --mode 1280x800 --pos 0x0 --rotate normal
}
# init
if [ "${1}" == "init" ]; then
if [ ! -e $LASTSTATE ]; then
touch $LASTSTATE
fi
cat $DOCKSTATE > $LASTSTATE;
fi
# test
if [ "${1}" == "dock" ]; then
dock
fi
if [ "${1}" == "undock" ]; then
undock
fi
# get states
CURRENT_STATE=`cat $DOCKSTATE`
LAST_STATE=`cat $LASTSTATE`
if [ $CURRENT_STATE != $LAST_STATE ]; then
if [ $CURRENT_STATE == "1" ]; then
dock
else
undock
fi
cat $DOCKSTATE > $LASTSTATE;
fi
exit 0