我希望当外接鼠标连接时自动禁用触摸板,当没有外接鼠标时启用触摸板。我尝试过使用,touchpad-indicator
但当计算机在连接鼠标的情况下进入睡眠状态并在断开鼠标连接的情况下唤醒时,这种方法会失败。
我试图将以下脚本变成守护进程来解决这个问题,但是无法让它工作:
#!/bin/bash
declare -i TID
declare -i MID
TID=`xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
MID=`xinput list | grep -Eo 'Mouse\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
if [ $MID -gt 0 ]
then
xinput disable $TID
else
xinput enable $TID
fi
我试过start-stop-daemon -S -x ./myscript.sh -b
和setsid ./myscript.sh >/dev/null 2>&1 < /dev/null &
甚至nohup ./myscript 0<&- &>/dev/null &
./myscript.sh &
所有这些都返回一些 4 位数字,我猜这应该是已启动进程的 PID,但是当我启动 lxtask没有具有此 PID 的进程,即使我勾选了“查看所有进程”。当然,它不起作用!
答案1
好的,我已经为它制定了一条 udev 规则,就像 @terdon 说的,更清洁的方式
因此,多亏了这一点指导,我在 /etc/udev/rules.d/ 中创建了一个“touchpad_toggle.rules”文件(需要 root 权限),并在其中填充了两行:
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/home/username/on.sh"
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/home/username/off.sh"
不要忘记用您的用户名替换“用户名”!
这些打开和关闭 shell 脚本的内容只是我的问题中脚本的阉割版本。示例 - off.sh:
#!/bin/bash
declare -i TID
TID=`xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
xinput disable $TID
您必须在 on.sh 中使用 xinput enable $TID
并且不要忘记将我的问题中的脚本(或@terdon 建议的脚本,但没有循环)添加到会话自动启动中,就像他在回答中告诉你的那样。
就是这样,但是我必须补充一点:
/usr/bin/synclient TouchpadOff=0
如果你有 Synaptics 触摸板(我有 Elantech,所以它不适合我),你可以分别用简单的命令和 1替换你的脚本(在 RUN+= 后写入的路径)
答案2
您需要的基本脚本非常简单:
#!/usr/bin/env bash
## Get the touchpad id. The -P means perl regular expressions (for \K)
## the -i makes it case insensitive (better portability) and the -o
## means print only the matched portion. The \K discards anything matched
## before it so this command will print the numeric id only.
TID=$(xinput list | grep -iPo 'touchpad.*id=\K\d+')
## Run every second
while :
do
## Disable the touchpad if there is a mouse connected
## and enable it if there is none.
xinput list | grep -iq mouse && xinput disable "$TID" || xinput enable "$TID"
## wait one second to avoind spamming your CPU
sleep 1
done
上述脚本将根据鼠标是否连接来切换触控板。启动后,它将一直运行,并每秒检查鼠标,从而禁用或启用触控板。
现在,将脚本另存为~/touchpad.sh
,使其可执行(chmod +x ~/touchpad.sh
)并将其添加到 GUI 会话启动程序中。您尚未指定要使用的桌面环境,但由于您提到lxtask
,我将假设您正在使用LXDE
。无论如何,以下是针对 和LXDE
的说明Unity
:
将脚本添加到 LXDE 的自动启动文件中
echo "@$HOME/touchpad.sh" >> ~/.config/lxsession/PROFILE/autostart file
确保将“PROFILE”替换为 LXDE 配置文件的实际名称,您可以通过运行来找出它是什么
ls ~/.config/lxsession/
。将脚本添加到 Unity 的自动启动文件中
打开
Startup Applications
(在仪表板中搜索“启动”)单击“添加”,然后将脚本的路径粘贴到命令字段中: