См. РЕШЕНИЕ в конце.
Я использовал это руководство, чтобы написать скрипт, который активируется, когда я открываю или закрываю крышку ноутбука. Моя установка - монитор ноутбука и внешний монитор, работающие хорошо вместе.
В основном (все отлично работает первые 3 шага, путаница начинается на шаге 4):
1) Я создал файл ~ / export_x_info о проблемах с разрешениями и запустил его на автозагрузка, содержащая:
# Export the dbus session address on startup so it can be used by any other environment
sleep 5
touch $HOME/.Xdbus
chmod 600 $HOME/.Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.Xdbus
# Export XAUTHORITY value on startup so it can be used by cron
env | grep XAUTHORITY >> $HOME/.Xdbus
echo 'export XAUTHORITY' >> $HOME/.Xdbus
2) Я создал /etc/acpi/lid.sh, указывающий на фактический скрипт в моем домашнем каталоге, содержащий эти две строки:
#!/bin/bash
/home/myname/scripts/lid_event
3) Вкл lid_event я поставил следующее:
grep -q closed /proc/acpi/button/lid/LID/state
if [ $? = 0 ]
then
/home/myname/scripts/close;
else
/home/myname/scripts/open;
fi
До сих пор все как и ожидалось. Я проверил файл "/ proc / acpi / button / lid / LID / state" и меняется в зависимости от того, открыта или закрыта крышка. Все файлы, которые я создал, являются исполняемыми, поэтому проблем здесь нет.
4) В моем скрипте «close» у меня есть это (скрипт «open» похож, поэтому нет необходимости упоминать его):
#This runs so that root can run the following command under the user's environment
source /home/myname/.Xdbus
#When laptop lid closes, close laptop screen.
DISPLAY=:0.0 su myname -c xrandr --output eDP1 --off
Когда я закрываю крышку, я хочу, чтобы экран ноутбука закрывался и только экран VGA вверх. Вышеприведенная команда прекрасно работает, когда она выполняется вручную на терминале или вручную выполняется этот сценарий, но когда речь идет об ACPI, она не выполняется!
Теперь странная вещь, если я поставлю простую команду, например «touch ~ /» file "в приведенном выше скрипте, он выполняется отлично!
Кажется, это специфическая проблема с xrandr. Я подозреваю, что могут быть некоторые нерешенные проблемы с разрешениями, но я не могу найти решение.
РЕШЕНИЕ
Кажется, что информация о сообществе человечности не завершена. Необходимо сделать еще один шаг для работы. Согласно это , дополнительно необходимо создать/etc/acpi/events/lm_lid и поместить:
event=button/lid.*
action=/etc/acpi/lid.sh
Теперь это хорошо работает для меня. Я обновил руководство Ubuntu, таким образом, можно безопасно следовать руководству здесь
Необходимо заключить в кавычки команду, которая su
должна работать так, это - одна строка:
DISPLAY=:0.0 su myname -c 'xrandr --output eDP1 --off'
iommu=soft
параметр загрузки к Вашему ответу. – lilezek 1 December 2016 в 07:27