Автоматическое переключение дисплея на док-станцию ​​Lenovo и Linux

8

У меня есть Lenovo ThinkPad с NVIDIA Optimus и мини-док-станция серии 3 .

Я хочу, чтобы во время пристыковки он автоматически переключался на внешний монитор, если это возможно, и если я отстыковываю его, он должен автоматически переключаться на ЖК-монитор ThinkPad.

Это также должно работать на этапе загрузки, потому что там я должен ввести пароль для зашифрованного диска (dm-crypt).

Я попробовал следующее, но это не работает:

Я создал файл /etc/acpi/thinkpad-undock.sh(+ chmod a+x thinkpad-undock.sh), который содержит следующие строки:

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

А также /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

И снова chmod a+x thinkpad-dock.sh.

Выполнение обоих сценариев вручную работает.

Затем я создал два файла для обработки событий:

thinkpad-dock-lenovo

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

а также thinkpad-undock-lenovo

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

Затем я перезагрузил демон acpi с помощью /etc/init.d/acpid reload. Однако, если я подключаю или отсоединяю ноутбук, он ничего не делает.

Я получил номер события выше, выполнив, acpi_listenа затем установив и отсоединив ноутбук.

Так есть ли идеи, как заставить это работать.

Возможно, проблема решается с помощью некоторой среды рабочего стола, например, kde, но я использую xmonad и, тем не менее, как указано выше, он должен работать даже на этапе загрузки независимо от среды рабочего стола.

Я использую Ubuntu 16.04 с версией ядра 4.4.0-22.

Я также попытался добавить правило udev следующим образом, но оно не сработало:

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

Я только что заметил, что файл dockвсегда имеет значение 0, независимо от того, подключен ли ноутбук или нет.

студент
источник

Ответы:

0

Ваш скрипт не устанавливает переменную окружения DISPLAY. Это должно выглядеть так:

#!/bin/sh
export DISPLAY=:0
xrandr --output LVDS-1 --auto --output DP-5.8 --off
hackerb9
источник
Спасибо. Я попробовал это, но это не работает. Я также не понимаю, почему это должно быть ошибкой, поскольку скрипт работает (с оператором экспорта и без него), если я выполняю его напрямую. Я скорее предполагаю, что скрипт не выполняется acpid.
ученик
0

Я имел счастье с установкой как DISPLAYи XAUTHORITY, а также добавление небольшого сна, например ,

export DISPLAY=:0
export XAUTHORITY=/home/user/.Xauthority
sleep 3
xrandr ...
Zulan
источник
0

У меня похожая настройка, однако я никогда не гонялся за решением реакции на док. Это интересный.

Вместо этого я использую диспетчер дисплея Gnome, чтобы отключить ЖК-дисплей, а внешний дисплей должен быть основным. Таким образом, когда я ставлю ноутбук на док-станцию, он переключается на внешний дисплей. Когда я поднимаю его, он переключается обратно на ЖК-дисплей.

Наличие этого на консоли (загрузка с установки dm-crypt) также работает, но имеет свои нюансы. Если крышка закрыта, я ставлю ноутбук на док-станцию ​​и включаю его, он автоматически загружается на внешний дисплей (все, включая экраны BIOS, лот). Если крышка открыта, она будет меняться только после входа в GDM.

Pedro
источник