Schaltet die Anzeige bei Lenovo Docking und Linux automatisch um

8

Ich habe ein Lenovo Thinkpad mit NVIDIA Optimus und eine Mini-Dockingstation Serie 3 .

Ich möchte, dass es im angedockten Zustand nach Möglichkeit automatisch zu einem externen Monitor wechselt. Wenn ich es abdocke, sollte es automatisch zum thinkpad lcd wechseln.

Dies sollte auch in der Startphase funktionieren, da ich dort ein Passwort für die verschlüsselte Festplatte (dm-crypt) eingeben muss.

Ich habe Folgendes versucht, aber es funktioniert nicht:

Ich habe eine Datei /etc/acpi/thinkpad-undock.sh(+ chmod a+x thinkpad-undock.sh) erstellt, die die folgenden Zeilen enthält:

#!/bin/sh
xrandr --output LVDS-1 --auto --output DP-5.8 --off

Und auch /etc/acpi/thinkpad-dock.sh

#!/bin/sh
prime-select nvidia # ensures that nvidia card is selected
xrandr --output LVDS-1 --off --output DP-5.8 --auto

Und wieder chmod a+x thinkpad-dock.sh.

Das manuelle Ausführen beider Skripte funktioniert.

Dann habe ich zwei Dateien für die Behandlung der Ereignisse erstellt:

thinkpad-dock-lenovo

event=ibm/hotkey LEN0068:00 00000080 00004010
action=/etc/acpi/thinkpad-dock.sh

und auch thinkpad-undock-lenovo

event=ibm/hotkey LEN0068:00 00000080 00004011
action=/etc/acpi/thinkpad-undock.sh

Dann habe ich den acpi-Daemon mit neu geladen /etc/init.d/acpid reload. Wenn ich den Laptop jedoch andocke oder abdocke, geschieht nichts.

Ich habe die oben angegebene Ereignisnummer erhalten, indem ich acpi_listenden Laptop ausgeführt und dann angedockt und abgedockt habe.

Gibt es also Ideen, wie es funktioniert?

Vielleicht wird das Problem durch eine Desktop-Umgebung gelöst, zum Beispiel kde, aber ich verwende xmonad und trotzdem sollte es, wie oben angegeben, auch auf der Startphase unabhängig von der Desktop-Umgebung funktionieren.

Ich verwende Ubuntu 16.04 mit der Kernel-Version 4.4.0-22.

Ich habe auch versucht, eine udev-Regel wie folgt hinzuzufügen, aber es hat nicht funktioniert:

ENV{EVENT}=="undock", KERNEL=="dock.0", SUBSYSTEM=="platform", RUN+="disper -s"
ENV{EVENT}=="dock", KERNEL=="dock.0", SUBSYSTEM=="platform", RUN+="disper -s"

Mir ist gerade aufgefallen, dass die Datei dockimmer den Wert 0 hat, unabhängig davon, ob der Laptop angedockt oder nicht angedockt ist.

Schüler
quelle

Antworten:

0

Ihr Skript legt die Umgebungsvariable DISPLAY nicht fest. Es sollte so aussehen:

#!/bin/sh
export DISPLAY=:0
xrandr --output LVDS-1 --auto --output DP-5.8 --off
hackerb9
quelle
Vielen Dank. Ich habe es versucht, aber es funktioniert nicht. Ich verstehe auch nicht, warum dies der Fehler sein sollte, da das Skript (mit und ohne Exportanweisung) funktioniert, wenn ich es direkt ausführe. Ich vermute eher, dass das Skript nicht von acpid ausgeführt wird.
Student
0

Ich habe Glück gehabt mit beiden Einstellung DISPLAYund XAUTHORITYsowie das Hinzufügen eines kleinen Schlaf, zB

export DISPLAY=:0
export XAUTHORITY=/home/user/.Xauthority
sleep 3
xrandr ...
Zulan
quelle
0

Ich habe ein ähnliches Setup, aber ich habe nie die Lösung verfolgt, auf das Dock zu reagieren. Es ist interessant.

Stattdessen verwende ich den Gnome-Display-Manager, um das LCD-Display auf "Aus" und das externe Display auf das primäre Display zu setzen. Auf diese Weise schaltet der Laptop, wenn ich ihn auf dem Dock abstelle, auf das externe Display um. Wenn ich es anhebe, wechselt es zurück zum LCD.

Dies auf der Konsole zu haben (Booten einer dm-crypt-Installation) funktioniert auch, hat aber seine Nuancen. Wenn der Deckel geschlossen ist, setze ich den Laptop auf das Dock und schalte ihn ein. Er startet automatisch auf dem externen Display (alles, einschließlich BIOS-Bildschirme, das Los). Wenn der Deckel geöffnet ist, wird er erst nach dem Anmelden bei GDM ausgetauscht.

Pedro
quelle