Сценарии открытия / закрытия крышки ACPI - xrandr не выполняется, но выполняются другие команды

См. РЕШЕНИЕ в конце.

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

В основном (все отлично работает первые 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. Я подозреваю, что могут быть некоторые нерешенные проблемы с разрешениями, но я не могу найти решение.

2
задан 7 September 2015 в 15:29

2 ответа

РЕШЕНИЕ

Кажется, что информация о сообществе человечности не завершена. Необходимо сделать еще один шаг для работы. Согласно это , дополнительно необходимо создать/etc/acpi/events/lm_lid и поместить:

event=button/lid.*
action=/etc/acpi/lid.sh

Теперь это хорошо работает для меня. Я обновил руководство Ubuntu, таким образом, можно безопасно следовать руководству здесь

2
ответ дан 8 September 2015 в 01:29
  • 1
    Я зафиксировал его путем отключения IOMMU, и затем установки iommu=soft на опции GRUB. Я upvote Вы, потому что это было очень полезно и I' ll выбирают Ваш ответ в качестве корректного, если Вы добавляете iommu=soft параметр загрузки к Вашему ответу. – lilezek 1 December 2016 в 07:27

Необходимо заключить в кавычки команду, которая su должна работать так, это - одна строка:

DISPLAY=:0.0 su myname -c 'xrandr --output eDP1 --off'
0
ответ дан 8 September 2015 в 01:29
  • 1
    Посмотрите мое редактирование выше. I' m довольный it' s зафиксированный. – chili555 1 December 2016 в 11:49

Другие вопросы по тегам:

Похожие вопросы: