我正在尝试调整 Ubuntu 16.04 上的触摸板,但似乎所有常用方法都不起作用。例如
synclient touchpadOff=1
它仍然有效!
$ xinput set-prop $DEVICE_ID "Device Enabled" 0
$ xinput list-props 15 |head -n2
Device 'SynPS/2 Synaptics TouchPad':
Device Enabled (168): 0
...它仍然有效!
我可以从“设置”应用程序中禁用它。但我希望能够将其映射到键盘快捷键,所以我正在寻找命令行解决方案。
如果你的回答在 Gnome-Shell 和 Unity 中都能正常工作,则可以获得加分 :-)
编辑:按照评论的要求输出 xinput。
$ xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ ELAN Touchscreen id=12 [slave pointer (2)]
⎜ ↳ DLL06E4:01 06CB:7A13 Touchpad id=13 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=15 [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)]
↳ Video Bus id=8 [slave keyboard (3)]
↳ Power Button id=9 [slave keyboard (3)]
↳ Sleep Button id=10 [slave keyboard (3)]
↳ Integrated_Webcam_HD id=11 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=14 [slave keyboard (3)]
↳ Dell WMI hotkeys id=16 [slave keyboard (3)]
注意:我已经用了 15$DEVICE_ID
编辑-感谢下面的回答这是我的切换脚本
你可以用一行代码完成,但这样你也会收到一个不错的通知。我已将其附加到快捷键上,效果很好。谢谢大家。
#!/bin/bash
if xinput list-props 13 | grep "Device Enabled (168):.*1" >/dev/null
then
xinput disable 13
notify-send -u low -i mouse "Trackpad disabled"
else
xinput enable 13
notify-send -u low -i mouse "Trackpad enabled"
fi
答案1
您可以使用以下命令关闭触摸板:
xinput disable 13
通过以下方式重新启用它
xinput enable 13
该设备不受 控制psmouse
。它受 控制synaptics_i2c
。它是设备 13。
您也可以像之前尝试过的那样通过名称切换,而不依赖于 ID。但是如果您不连接新的输入设备,ID 应该会保留。
看这个答案了解详细信息。
要删除错误检测的设备,您需要添加i8042.nopnp
内核启动参数。
答案2
使用 gsettings
如果您可以通过 更改设置gsettings
,通常这是首选选项。由于您可以从系统设置中启用/禁用触摸板,而且我很确定系统设置做使用gsettings
,看起来下面的方法应该可以完成这项工作,在您的戴尔上也是如此。
切换触摸板的脚本
14.04
#!/usr/bin/env python3
import subprocess
key = "org.gnome.settings-daemon.peripherals.touchpad" ;val = "touchpad-enabled"
curr = subprocess.check_output(["gsettings", "get", key, val]).decode("utf-8").strip()
newval = "false" if curr == "true" else "true"
subprocess.Popen(["gsettings", "set", key, val, newval])
15.04+
#!/usr/bin/env python3
import subprocess
key = "org.gnome.desktop.peripherals.touchpad" ;val = "send-events"
curr = subprocess.check_output(["gsettings", "get", key, val]).decode("utf-8").strip()
newval = "disabled" if curr == "'enabled'" else "enabled"
subprocess.Popen(["gsettings", "set", key, val, newval])
使用它
- 将上述脚本(适用于你的 Ubuntu 版本)复制到一个空文件中,并将其另存为
toggle_touchpad.py
将以下命令添加到快捷方式:
python3 /path/to/toggle_touchpad.py
选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。点击“+”并添加命令:
python3 /path/to/toggle_touchpad.py
解释
禁用触摸板的命令:
14.04 版:
gsettings set org.gnome.settings-daemon.peripherals.touchpad touchpad-enabled false
适用于 15.04 +:
gsettings set org.gnome.desktop.peripherals.touchpad send-events disabled
读取当前状态
如果我们使用脚本通过以下命令读取当前设置:
gsettings get org.gnome.settings-daemon.peripherals.touchpad touchpad-enabled
(14.04),或
gsettings get org.gnome.desktop.peripherals.touchpad send-events
(15.04+)
我们可以让脚本设置相反的值,这样切换触摸板。
编辑;切换脚本的 bash 版本
只是为了完整起见,并且因为 OP 指出python
脚本可以工作,但不想使用python
,所以bash
两个切换脚本的版本:
14.04
#!/bin/bash
key="org.gnome.settings-daemon.peripherals.touchpad"
val="touchpad-enabled" ;curr="$key $val"
if [ "$(gsettings get $curr)" == "false" ]
then
gsettings set $key $val true
else
gsettings set $key $val false
fi
15.04+
#!/bin/bash
key="org.gnome.desktop.peripherals.touchpad"
val="send-events" ;curr="$key $val"
if [ "$(gsettings get $curr)" == "'enabled'" ]
then
gsettings set $key $val disabled
else
gsettings set $key $val enabled
fi
放在快捷键下
- 将脚本另存为
toggle_touchpad.sh
将以下命令放在自定义快捷方式下:
/bin/bash /path/to/toggle_touchpad.sh
答案3
我也是 16.04。我通常使用放在键盘快捷键上的一个小脚本。当我执行它时,它会关闭我的触摸板……但几秒钟后它又打开了……
剧本:
#!/bin/sh
STATUS=`synclient | grep TouchpadOff | awk '{ print $3}'`
if [ $STATUS != 1 ];
then
synclient touchpadOff=1;
else
synclient touchpadOff=2;
fi
exit 0
在看到你的问题之前我不会尝试使用它......
答案4
我使用了OP的脚本,但是在我的笔记本中设备ID在每次启动时都会改变,所以我做了一些修改。
现在它运行得非常好。
# Find device id and store it in a variable
LINE=$(xinput | grep -o "Touchpad.*id=[0-9][0-9]")
TOUCH=$(echo $LINE | grep -o [0-9][0-9])
if xinput list-props $TOUCH | grep "Device Enabled (187):.*1" >/dev/null
then
xinput disable $TOUCH
notify-send -u low -i mouse "Touchpad disabled"
else
xinput enable $TOUCH
notify-send -u low -i mouse "Touchpad enabled"
fi