我有一台 HP Elitebook 2740p,它有用于平板电脑模式的旧式旋转显示器。此旋转会生成 ACPI 事件,我使用它来运行一个脚本,该脚本会在显示器旋转到平板电脑模式和退出平板电脑模式时旋转屏幕以及触摸和笔输入。使用 ACPID 时,Xrandr、Xinput 和 Krita 命令不会执行,但日志记录显示脚本已执行。屏幕和笔/触摸输入不会旋转,也不会记录任何错误。但是,当以 root 或用户身份手动运行脚本时,它们会按预期执行并旋转屏幕、触摸和笔输入。脚本中未设置 DISPLAY 变量
脚本如下
/etc/acpi/events/平板电脑模式
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
/home/foo/scripts/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
操作显示的程序需要设置DISPLAY
环境变量来告诉它们哪个display 的使用。这通常是正确的,特别是对于名称以 开头的命令x
,例如xrandr
和xinput
。该DISPLAY
变量会自动为在终端上运行的 shell 设置,但不会为由事件触发的脚本设置。
您需要确定 ACPI 事件所针对的显示器的名称,并DISPLAY
相应地设置环境变量。