盖子放下时禁用触摸板

Att*_* O. 9 touchpad ubuntu-netbook kubuntu

Kubuntu 11.10(上网本版)

我妻子的上网本有以下问题:当盖子合上时,它会时不时地激活触摸板 - 它会进行小动作和轻敲。笔记本电脑设置为在插入 AC 适配器时不进入睡眠状态,因此每当盖子合上时,它都会继续自行处理。

在暂停电影和睡觉时尤其烦人,因为一段时间后它会点击播放器窗口并继续播放电影,吓坏周围的每个人。

我没有找到在盖子关闭时禁用触摸板的任何选项,但也许有某种事件我可以手动连接并禁用/重新启用它?

Att*_* O. 10

由于没有人能告诉我如何做我想做的事,这是我想出的解决方案:

禁用触摸板/鼠标

$ xinput --list
? Virtual core pointer                          id=2    [master pointer  (3)]
?   ? Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
?   ? FSPPS/2 Sentelic FingerSensingPad         id=12   [slave  pointer  (2)]
? Virtual core keyboard                         id=3    [master keyboard (2)]
    ? Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ? Power Button                              id=6    [slave  keyboard (3)]
    ? Video Bus                                 id=7    [slave  keyboard (3)]
    ? Sleep Button                              id=8    [slave  keyboard (3)]
    ? Power Button                              id=9    [slave  keyboard (3)]
    ? USB2.0 UVC PC Camera                      id=10   [slave  keyboard (3)]
    ? AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]
    ? MSI Laptop hotkeys                        id=13   [slave  keyboard (3)]
Run Code Online (Sandbox Code Playgroud)

正如我们所看到的,我的触摸板是带有id=12. 要禁用它,我需要运行:

$ xinput set-int-prop 12 "Device Enabled" 8 0
Run Code Online (Sandbox Code Playgroud)

并再次启用它:

$ xinput set-int-prop 12 "Device Enabled" 8 1
Run Code Online (Sandbox Code Playgroud)

获取盖子状态

首先,我可以从这个文件中获取系统上盖子的状态:

$ cat /proc/acpi/button/lid/LID0/state 
state:      open
Run Code Online (Sandbox Code Playgroud)

当我合上盖子时,状态变为closed

现在要将状态作为变量,我可以检查一个漂亮grep命令的退出状态:

$ grep -q closed /proc/acpi/button/lid/*/state
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)

因此,要根据盖子状态启用或禁用触摸板,我需要做的就是:

$ grep -q closed /proc/acpi/button/lid/*/state
$ xinput set-int-prop 12 "Device Enabled" 8 $?
Run Code Online (Sandbox Code Playgroud)

挂钩 ACPI 盖子事件

为了在每次盖子关闭或打开时执行上述命令,我创建了/etc/acpi/local/lid.sh.post包含以下内容的文件:

export XAUTHORITY=`ls -1 /home/*/.Xauthority | head -n 1`
export DISPLAY=":`ls -1 /tmp/.X11-unix/ | sed -e s/^X//g | head -n 1`"

grep -q closed /proc/acpi/button/lid/*/state
xinput set-int-prop 12 "Device Enabled" 8 $?
Run Code Online (Sandbox Code Playgroud)

XAUHTORITY并且DISPLAY需要设置以允许root(谁运行该acpid进程)访问用户的 X 会话。