我有一台 5 年前的笔记本电脑,我认为触摸屏出现了故障,因为我的光标有时会闪烁,窗口突然移动,等等,就像我的笔记本电脑着了魔一样。在我全新安装 Ubuntu 22.04 之前,这个问题在 Ubuntu 20.04 中开始出现,问题仍然存在,所以我不认为操作系统是罪魁祸首;我很确定是触摸屏。
我试过了
xinput disable 5
但我明白
WARNING: running xinput against an Xwayland server. See the xinput man page for details.
并且它不会禁用触摸屏。
我试过:
modprobe -r hid_multitouch
但这只会禁用触摸板(而不是触摸屏)的部分功能。
那么,在全新安装的 Ubuntu 22.04(Wayland)上禁用触摸屏的正确方法是什么?谢谢。
答案1
我跟着此主题并创建了一些适用于全新安装的 ubuntu 22.04 的脚本。
我不知道如何让 awk 的匹配函数工作,所以我只是使用来自@meuh 和 @JinnKo 的代码来创建一个非 awk 版本,通过给定关键字来禁用/切换多个设备。
首先,确保 evtest 已安装:
sudo apt install evtest
我有两个文件,一个用于打开和关闭触摸屏,另一个用于在启动时始终禁用触摸屏。
切换触摸屏:
#!/bin/bash
# This toggles my touchscreen
#search for "Touchscreen" or something like that in /proc/bus/input/devices to make sure you're disabling what you want to disable.
path_for_temp_files="/ANY_PATH_YOU_WANT_TO_STORE_SOME_PID_FILES/"
regex='event([0-9]+)'
DEVICE="Touchscreen"
if [ -r "${path_for_temp_files}touchscreen-evtest0.pid" ]; then
kill_these_files=("${path_for_temp_files}"touchscreen-evtest*)
for i in "${kill_these_files[@]}"; do
echo "kill" $(cat "${i}")
sudo kill $(cat "${i}")
sudo rm "${i}"
done
else
filename='/proc/bus/input/devices'
inside=0
events=()
while read line; do
if [[ $line =~ $DEVICE ]]; then
inside=1
fi
if [[ $line =~ $regex ]]; then
if [[ "$inside" -eq 1 ]]; then
events+=("${BASH_REMATCH[1]}")
fi
inside=0
fi
done < $filename
numevents=${#events[@]}
for (( i=0; i<${numevents}; i++ )); do
sudo evtest --grab "/dev/input/event${events[$i]}" > /dev/null &
pid=$!
echo $pid > "${path_for_temp_files}touchscreen-evtest${i}.pid"
echo "/dev/input/event${events[$i]} running on pid ${pid}"
done
fi
禁止触摸屏在启动时运行:
#!/bin/bash
# This disables my touchscreen
#search for "Touchscreen" or something like that in /proc/bus/input/devices to make sure you're disabling what you want to disable.
path_for_temp_files="/ANY_PATH_YOU_WANT_TO_STORE_SOME_PID_FILES/"
regex='event([0-9]+)'
DEVICE="Touchscreen"
if [ -r "${path_for_temp_files}touchscreen-evtest0.pid" ]; then
kill_these_files=("${path_for_temp_files}"touchscreen-evtest*)
for i in "${kill_these_files[@]}"; do
echo "kill" $(cat "${i}")
sudo kill $(cat "${i}")
sudo rm "${i}"
done
fi
filename='/proc/bus/input/devices'
inside=0
events=()
while read line; do
if [[ $line =~ $DEVICE ]]; then
inside=1
fi
if [[ $line =~ $regex ]]; then
if [[ "$inside" -eq 1 ]]; then
events+=("${BASH_REMATCH[1]}")
fi
inside=0
fi
done < $filename
numevents=${#events[@]}
for (( i=0; i<${numevents}; i++ )); do
sudo evtest --grab "/dev/input/event${events[$i]}" > /dev/null &
pid=$!
echo $pid > "${path_for_temp_files}touchscreen-evtest${i}.pid"
echo "/dev/input/event${events[$i]} running on pid ${pid}"
done
然后我跟着这个答案在启动时以 root 身份运行
答案2
虽然这已经很老了,但我想分享一下,我用公认的答案创建了一个小助手脚本对我来说。脚本会根据触控笔的接近度自动禁用和启用 Touch。
目前,我在我的 ThinkPad Yoga L13ut 上使用带有 wayland 的 Ubuntu 22.04,它可能也很容易适应其他系统。
答案3
我发现以上方法都不起作用(没有触摸屏设备)。所以我从 Wayland 切换到 X11,然后运行xinput disable 11
,11 看起来像是一个指点设备(xinput 列表):
⎜ ELAN2514:00 04F3:2AF2 id=11 [从属指针 (2)]
⎜ SYNA32A0:00 06CB:CE14 鼠标id=13 [从属指针(2)]
⎜ SYNA32A0:00 06CB:CE14 触摸板id=14 [从属指针(2)]
ELAN 和 SYNAptics 是两种指针芯片类型。我猜 ELAN 是触摸屏。
要切换到 X11,当您输入登录名时,登录页面的右下角会出现一个齿轮。单击该齿轮并选择 X11。