AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1006660
Accepted
Ratler
Ratler
Asked: 2018-02-16 18:31:53 +0800 CST2018-02-16 18:31:53 +0800 CST 2018-02-16 18:31:53 +0800 CST

xinput 的更改随机恢复为默认值

  • 772

我在带有 ELAN 触摸屏和 DELL 750-AAHC 有源手写笔的笔记本电脑上使用 Kubuntu 16.04 (xenial)。手写笔上的一个按钮充当鼠标中键,我希望它改为右键。

我可以通过这样做来实现这一点

$ xinput set-button-map "ELAN Touchscreen Pen" 1 3 2

(即,将必须与右键对应的按钮3的功能映射到物理按钮2)。

这可以满足我的要求,但更改不是永久性的。

我添加了命令~/.xsessionrc(根据this post的答案),所以当我重新启动时它会自动运行,但是按钮映射“随机”恢复为默认值:它按预期工作了一段时间,突然我发现它没有,所以我明白了

$ xinput get-button-map "ELAN Touchscreen Pen"
1 2 3 4 5

我必须手动重新映射它。

我尝试了一些“可疑”的事情来查看可能导致恢复的原因,但我无法弄清楚。这不是由

  • 暂停笔记本电脑或关闭屏幕
  • 旋转屏幕(这是可疑的,因为 xinput 用于旋转以转换输入矩阵。)
  • 切换触摸屏、触摸板或触控笔输入的开/关(也可以使用 xinput)。

重要更新:

我发现这个问题并非特定于手写笔:我之前出于某种原因禁用了屏幕的手指触摸功能(“ELAN Touchscreen”),方法是:

$ xinput disable "ELAN Touchscreen"

我刚刚发现它自己回来了(并且手写笔右键单击再次恢复了)。因此,由于这个未知原因,所有 xinput 更改似乎都恢复为默认值。

更新 2

/var/log/syslog当这种情况再次发生时,我发现了一些可疑条目。时间戳是在我实际上有一段时间没有使用笔记本电脑的时候,所以节能功能可能被激活(我在 9 分钟时有“暗屏”,在 10 分钟时“关闭”;我将尝试能源保存并相应更新)。

下面的模式实际上重复了很多次,每个块之间只有几秒钟的差异。

usb 1-8: USB disconnect, device number 18
usb 1-8: new full-speed USB device number 19 using xhci_hcd
usb 1-8: New USB device found, idVendor=04f3, idProduct=2073
usb 1-8: New USB device strings: Mfr=4, Product=14, SerialNumber=0
usb 1-8: Product: Touchscreen
usb 1-8: Manufacturer: ELAN
input: ELAN Touchscreen Pen as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EE/input/input7548
input: ELAN Touchscreen as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EE/input/input7549
input: ELAN Touchscreen Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EE/input/input7552
hid-multitouch 0003:04F3:2073.04EE: input,hiddev0,hidraw0: USB HID v1.10 Keyboard [ELAN Touchscreen] on usb-0000:00:14.0-8/input0

在每个区块中,除了少数增加的数字外,几乎所有内容都相同。这是用于比较的下一个块:

usb 1-8: USB disconnect, device number 19
usb 1-8: new full-speed USB device number 20 using xhci_hcd
usb 1-8: New USB device found, idVendor=04f3, idProduct=2073
usb 1-8: New USB device strings: Mfr=4, Product=14, SerialNumber=0
usb 1-8: Product: Touchscreen
usb 1-8: Manufacturer: ELAN
input: ELAN Touchscreen Pen as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EF/input/input7554
input: ELAN Touchscreen as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EF/input/input7555
input: ELAN Touchscreen Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EF/input/input7558
hid-mul itouch 0003:04F3:2073.04EF: input,hiddev0,hidraw0: USB HID v1.10 Keyboard [ELAN Touchscreen] on usb-0000:00:14.0-8/input0

设备编号为 128。

系统:

  • KDE 等离子 5.5.5
  • Qt 5.5.1
  • 内核 4.13.0-32-generic #35~16.04.1-Ubuntu 64-bit
  • xinput 版本 1.6.2

    服务器上的 XI 版本:2.3

  • X.Org X 服务器 1.19.5

    发布日期:2017-10-12

    X 协议版本 11,修订版 0

touchscreen button stylus xinput remapping
  • 1 1 个回答
  • 1445 Views

1 个回答

  • Voted
  1. Best Answer
    stumblebee
    2018-02-20T19:16:37+08:002018-02-20T19:16:37+08:00

    这似乎是一个错误(触摸屏设备随机断开连接并重新连接为新设备,这具有将所有设置重置为默认值的副作用)。

    作为一种解决方法,您可以创建自己的udev规则(文件名基于Daniel Drake 的这些建议),该规则将运行一个脚本,在触摸屏重新连接时重新应用 xinput 更改:

    sudo nano /etc/udev/rules.d/10-custom-elan.rules
    

    并添加包含“idVendor”和“idProduct”信息的这一行(来自您的syslog)。必须使用“ elan.sh”的绝对路径。

    ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="2073", RUN+="/home/username/elan.sh"
    

    (大致翻译为“当找到与指定属性匹配的设备时,运行指定脚本”)。

    然后创建实际的脚本来运行xinput:

    nano /home/username/elan.sh 
    

    使用以下几行:

    #!/usr/bin/env bash
    
    #These lines allow the script to be called by udev rules
    export DISPLAY=":0"
    export XAUTHORITY="/home/username/.Xauthority"
    
    #Command to remap buttons
    xinput set-button-map "ELAN Touchscreen Pen" 1 3 2 4 5
    

    当然,让它可执行:

    chmod +x /home/username/elan.sh
    

    如果没有导出行,脚本在您(活动用户)直接调用时有效,但在 udev(root 用户)调用时无效。详细信息可以在这个和这个答案中找到,但这里有一个简短的总结:

    要在用户桌面上启动图形程序,您需要两件事:地址(用户桌面上的显示)和授权。当用户登录时,登录管理器通过生成 cookie 来授权与 X 服务器的连接,将其添加到服务器并通过将其写入 $HOME/.Xauthority 将其传递给用户。然后,root 用户应该能够通过了解用户使用的显示器和访问 Xauthority cookie 来进行连接。这就是出口线实现的目标。

    注意:显示号码是硬编码的事实在某些情况下可能会导致问题,但在这种使用场景(个人笔记本电脑的单个用户)中可能会没问题。

    • 1

相关问题

  • 平板电脑上的触摸屏和鼠标无法正常工作[关闭]

  • HP TC4200 平板电脑触控笔无法在 Unity 界面上运行

  • 我的蓝牙耳机上的按钮不起作用

  • 设置 3M 串行触摸屏

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve