如何根据鼠标是否连接来切换触摸板?

如何根据鼠标是否连接来切换触摸板?

我希望当外接鼠标连接时自动禁用触摸板,当没有外接鼠标时启用触摸板。我尝试过使用,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

  1. 将脚本添加到 LXDE 的自动启动文件中

    echo "@$HOME/touchpad.sh" >> ~/.config/lxsession/PROFILE/autostart file
    

    确保将“PROFILE”替换为 LXDE 配置文件的实际名称,您可以通过运行来找出它是什么ls ~/.config/lxsession/

  2. 将脚本添加到 Unity 的自动启动文件中

    打开Startup Applications(在仪表板中搜索“启动”)

    在此处输入图片描述

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

    在此处输入图片描述

相关内容