ACPID не может запускать команды в скриптах

272
Nefirim

У меня HP Elitebook 2740p, у которого есть вращающийся монитор старого стиля для режима планшета. Это вращение генерирует событие ACPI, которое я использую для запуска сценария, который поворачивает экран, а также сенсорный и перьевой ввод, когда монитор поворачивается в режим планшета и из него. При использовании ACPID команды Xrandr, Xinput и Krita не выполняются, но ведение журнала показывает, что скрипт выполнен. Экран и перьевой / сенсорный вводы не вращаются, и ошибки не регистрируются. Однако при запуске сценариев вручную от имени пользователя root или от имени пользователя они выполняются по назначению и поворачивают экранные, сенсорные и перьевые вводы. Переменная DISPLAY не установлена ​​в скриптах

Сценарии таковы

/ И т.д. / ACPI / События / tabletmode

event=video/tabletmode.* action=/etc/acpi/actions/tabletmode.sh 

/etc/acpi/actions/tabletmode.sh

#!/bin/bash logger "tabletmode.sh executed" grep -q 0 /sys/devices/platform/hp-wmi/tablet if [ $? = 0 ] then /home/foo/scripts/tabletmodeoff ; else /home/foo/scripts/tabletmodeon ; fi 

/ Главная / Foo / скрипты / tabletmodeoff

#!/bin/sh source /home/foo/.Xdbus /usr/bin/xrandr -o normal /usr/bin/xinput set-prop "Wacom Serial Penabled 2FG Touchscreen Pen Pen (0)" 144 1 0 0 0 1 0 0 0 1 /usr/bin/xinput set-prop "Wacom Serial Penabled 2FG Touchscreen Finger" 144 1 0 0 0 1 0 0 0 1 

/ Главная / Foo / скрипты / tabletmodeon

#!/bin/sh source /home/foo/.Xdbus /usr/bin/xrandr -o inverted /usr/bin/xinput set-prop "Wacom Serial Penabled 2FG Touchscreen Pen Pen (0)" 144 -1 0 1 0 -1 1 0 0 1 /usr/bin/xinput set-prop "Wacom Serial Penabled 2FG Touchscreen Finger" 144 -1 0 1 0 -1 1 0 0 1 su -c /usr/bin/krita foo 
1
Можете ли вы уточнить, что вы подразумеваете под «определенные команды не будут выполняться»? G-Man 6 лет назад 0
Команды xrandr, xinput и Krita не выполняются. Nefirim 6 лет назад 0
(1) На чем вы говорите? Вы получаете сообщения об ошибках? (Если так, что они?) Или вы просто наблюдаете, какой функциональности не происходит? (2) Установлен ли DISPLAY для сценариев, управляемых событиями? Правильно ли работают ваши сценарии при интерактивном / ручном запуске, если вы отключили DISPLAY? …………………………………………………………………………………… Пожалуйста, не отвечайте в комментариях; [отредактируйте] ваш вопрос, чтобы сделать его более понятным и полным. G-Man 6 лет назад 0
обновил вопрос, но я провел тестирование на основе ваших переменных вопросов DISPLAY и смог решить его. Это произошло из-за того, что DISPLAY не был установлен, поэтому я поместил его в .Xdbus, чтобы он экспортировался при каждом запуске источника Nefirim 6 лет назад 0
Спасибо за ответ. Если вы решили проблему, вы можете помочь другим людям, которые столкнутся с этой проблемой в будущем, опубликовав решение в качестве ответа. Войдите в поле «Ваш ответ» (ниже) и опишите, что вы сделали. В основном, возьмите свой комментарий (выше) и, в идеале, добавьте немного больше деталей. G-Man 6 лет назад 0

1 ответ на вопрос

0
G-Man

Программы, которые управляют дисплеем, должны иметь DISPLAYпеременную окружения, чтобы указать им, какой дисплей использовать. Это обычно верно, в частности, для команд, имена которых начинаются с x, таких как xrandrи xinput. DISPLAYПеременная устанавливается соответствующим образом автоматически для оболочек, работающих на терминале, но не для сценариев, вызванных событиями.

Вам нужно будет определить имя дисплея, для которого предназначены события ACPI, и соответственно установить DISPLAYпеременную среды.

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