Hallo,
heute habe ich mal keine Frage, sondern einen kleinen nützlichen Tipp! Ich glaube es könnte für den ein- oder anderen nützlich sein
Ich wollte eine sehr eigentlich eine einfache Sache haben: wenn ich den Laptop andocke, soll der externe Monitor eingeschaltet werden, beim abdocken vice-versa! Das hörte sich für mich recht einfach an, nahm dann aber trotzdem 1-2 Stündchen in Anspruch. Damit niemand anderes so lang frickeln muss, hier also die meine Lösung!
Alles bezieht sich bei mir auf (K)Ubuntu, es sollte aber theoretisch von der Distribution und auch von der grafischen Oberfläche unabhängig sein, sofern ein X-Server da ist, der umgeschaltet werden kann. Das Script benutzt udev um das Dock-Event abzufangen und xrandr um den Bildschirm umzuschalten. Beide sollten also installiert und lauffähig sein. Unter Ubuntu ist das der Fall!
Die udev Regel fängt das dock-event ab und ruft daraufhin ein Script. Sie liegt unter /lib/udev/rules.d/98-screen-switch.rules und hat folgenden Inhalt:
Die Dateirechte kann man so setzen:
Ihr müsst "EUER_NUTZERNAME" natürlich mit eurem Username ersetzen. Wie ihr seht ruft udev ein Script als Superuser auf. Dieses Script, dass die eigentliche Arbeit ausführt müssen wir jetzt noch unter: /lib/udev/screen-switch-udev anlegen.
Die Dateirechte müssen hier auch das Executable-bit setzen, deshalb lauten sie wie folgt:
An diesem Script kann man nun einige Einstellungen vornehmen, zum Beispiel die Variable EXT_DISP auf den gewünschten externen Displayadapter umstellen, je nach dem wie euer Monitor angeschlossen ist. Möglich sind DP1, HDMI1, VGA1 ... sicherlich bei dem Ein oder Anderen auch andere.. das bekommt Ihr über den Befehl "xrandr" in der Konsole heraus. Des Weiteren können mit xrandr auch mehrere Monitore aktiviert und relativ zueinander positioniert werden. Die Syntax für xrandr ist recht einfach und kann über das Man-File herausgefunden werden. Auch wäre es denkbar noch mehr Befehle auszuführen... je nach Lust und Laune.
Nun denn, ich hoffe es war einigermaßen verständlich und vielleicht auch nützlich....
Hinweise
Das Script wird mit eurem Benutzer ausgeführt, welcher in der udev-Regel hard-coded ist. Sollte es sich also um ein Mehrbenutzersystem handeln, wird diese Lösung nicht funktionieren.
Der sleep Befehl ist vielleicht nicht sehr elegant, er muss aber sein, damit das Subsystem den neuen Ausgang nach dem Docken überhaupt initialisiert hat, bevor wir versuchen, diesen auch einzuschalten.
Wenn jemand Anregungen hat, immer her damit
Ich bin kein Profi und sicherlich ist etwas nicht besonders elegant gelöst....
Credits
..gehen an linrunner, denn ich habe sein tlp-rdw script reverse engineered... ich hoffe das ist ok so, dadurch habe ich verstanden wie udev funktioniert. Außerdem habe mich an 2-3 Blogs im Netz bedient, die ich aber leider nicht mehr finden kann :/
heute habe ich mal keine Frage, sondern einen kleinen nützlichen Tipp! Ich glaube es könnte für den ein- oder anderen nützlich sein

Ich wollte eine sehr eigentlich eine einfache Sache haben: wenn ich den Laptop andocke, soll der externe Monitor eingeschaltet werden, beim abdocken vice-versa! Das hörte sich für mich recht einfach an, nahm dann aber trotzdem 1-2 Stündchen in Anspruch. Damit niemand anderes so lang frickeln muss, hier also die meine Lösung!
Alles bezieht sich bei mir auf (K)Ubuntu, es sollte aber theoretisch von der Distribution und auch von der grafischen Oberfläche unabhängig sein, sofern ein X-Server da ist, der umgeschaltet werden kann. Das Script benutzt udev um das Dock-Event abzufangen und xrandr um den Bildschirm umzuschalten. Beide sollten also installiert und lauffähig sein. Unter Ubuntu ist das der Fall!
Die udev Regel fängt das dock-event ab und ruft daraufhin ein Script. Sie liegt unter /lib/udev/rules.d/98-screen-switch.rules und hat folgenden Inhalt:
Code:
# automatic screen switch - udev rule
# handle dock/undock events
ACTION=="change", SUBSYSTEM=="platform", KERNEL=="dock.*", ATTR{type}=="dock_station", RUN+="/bin/su EUER_NUTZERNAME -c /lib/udev/screen-switch-udev"
Die Dateirechte kann man so setzen:
Code:
sudo chmod 644 /lib/udev/rules.d/98-screen-switch.rules
Ihr müsst "EUER_NUTZERNAME" natürlich mit eurem Username ersetzen. Wie ihr seht ruft udev ein Script als Superuser auf. Dieses Script, dass die eigentliche Arbeit ausführt müssen wir jetzt noch unter: /lib/udev/screen-switch-udev anlegen.
Code:
#!/bin/sh
export DISPLAY=:0
# define your external display-adapter here
EXT_DISP=DP1
# this is to ensure that the monitor is available to the system before switching to it
sleep 2
case $EVENT in
dock) # laptop was docked
/usr/bin/xrandr --output LVDS1 --off --output $EXT_DISP --auto
;;
undock) # laptop was undocked
/usr/bin/xrandr --output $EXT_DISP --off --output LVDS1 --auto
;;
esac
exit 1
Die Dateirechte müssen hier auch das Executable-bit setzen, deshalb lauten sie wie folgt:
Code:
sudo chmod 755 /lib/udev/screen-switch-udev
An diesem Script kann man nun einige Einstellungen vornehmen, zum Beispiel die Variable EXT_DISP auf den gewünschten externen Displayadapter umstellen, je nach dem wie euer Monitor angeschlossen ist. Möglich sind DP1, HDMI1, VGA1 ... sicherlich bei dem Ein oder Anderen auch andere.. das bekommt Ihr über den Befehl "xrandr" in der Konsole heraus. Des Weiteren können mit xrandr auch mehrere Monitore aktiviert und relativ zueinander positioniert werden. Die Syntax für xrandr ist recht einfach und kann über das Man-File herausgefunden werden. Auch wäre es denkbar noch mehr Befehle auszuführen... je nach Lust und Laune.
Nun denn, ich hoffe es war einigermaßen verständlich und vielleicht auch nützlich....
Hinweise
Das Script wird mit eurem Benutzer ausgeführt, welcher in der udev-Regel hard-coded ist. Sollte es sich also um ein Mehrbenutzersystem handeln, wird diese Lösung nicht funktionieren.
Der sleep Befehl ist vielleicht nicht sehr elegant, er muss aber sein, damit das Subsystem den neuen Ausgang nach dem Docken überhaupt initialisiert hat, bevor wir versuchen, diesen auch einzuschalten.
Wenn jemand Anregungen hat, immer her damit

Credits
..gehen an linrunner, denn ich habe sein tlp-rdw script reverse engineered... ich hoffe das ist ok so, dadurch habe ich verstanden wie udev funktioniert. Außerdem habe mich an 2-3 Blogs im Netz bedient, die ich aber leider nicht mehr finden kann :/