mek*_*zer 11 touchpad xorg bash
我想让我的触摸板在连接外部鼠标时自动禁用,并在没有时启用。我曾尝试使用,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
Run Code Online (Sandbox Code Playgroud)
我试过 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 的进程。而且,当然,它不起作用!
mek*_*zer 11
好的,我已经为它制定了 udev 规则,就像 @terdon 所说的那样,这是一种更简洁的方式
因此,多亏了本指南,我在 /etc/udev/rules.d/(需要 root 访问权限)中创建了一个“touchpad_toggle.rules”文件,并用两行填充它:
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"
Run Code Online (Sandbox Code Playgroud)
不要忘记用您的用户名替换“用户名”!
这些外壳上和外壳下脚本的内容只是我问题中脚本的阉割版本。示例 - 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
Run Code Online (Sandbox Code Playgroud)
您必须在 on.sh 中使用 xinput enable $TID
并且不要忘记将我的问题中的脚本(或@terdon 建议的脚本,但没有循环)添加到会话自动启动中,就像他在回答中告诉您的那样。
就是这样,但我必须补充一件事:
如果你有一个 Synaptics 触摸板(我有 Elantech,所以它不适合我),你可以用一个简单的命令/usr/bin/synclient TouchpadOff=0和 1 分别替换你的脚本(你在 RUN+= 之后写入的路径)
ter*_*don 10
您需要的基本脚本很简单:
#!/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
Run Code Online (Sandbox Code Playgroud)
上面的脚本将根据是否连接鼠标来切换触控板。启动后,它将永远运行,并每秒检查鼠标,相应地禁用或启用触摸板。
现在,将脚本另存为~/touchpad.sh,使其可执行 ( chmod +x ~/touchpad.sh) 并将其添加到您的 GUI 会话启动程序中。您尚未指定您使用的桌面环境,但既然您提到了lxtask,我将假设您使用的是LXDE. 在任何情况下,这里都有关于LXDE和 的说明Unity:
将脚本添加到 LXDE 的自动启动文件中
echo "@$HOME/touchpad.sh" >> ~/.config/lxsession/PROFILE/autostart file
Run Code Online (Sandbox Code Playgroud)
确保将“PROFILE”替换为 LXDE 配置文件的实际名称,您可以通过运行ls ~/.config/lxsession/.
将脚本添加到 Unity 的自动启动文件中
打开Startup Applications(在仪表板中搜索“启动”)

单击“添加”,然后在命令字段中粘贴脚本的路径:

| 归档时间: |
|
| 查看次数: |
2854 次 |
| 最近记录: |