切换触摸屏:

切换触摸屏:

我有一台 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。

相关内容