随xinput的更改会随机恢复为默认值
我在带有ELAN触摸屏和DELL 750-AAHC有源手写笔的笔记本电脑上使用Kubuntu 16.04(xenial)。 手写笔上的一个按钮表现为鼠标中键,我希望它是一个右键。
我可以做到这一点
$ xinput set-button-map "ELAN Touchscreen Pen" 1 3 2
(即,将必须对应于右按钮的按钮3的function映射到物理按钮2)。
这就是我想要的,但改变不是永久性的。
我在~/.xsessionrc
添加了命令(根据这篇文章中的答案 ),所以当我重启时它会自动运行,但按钮映射“随机”会自动恢复为默认值:它按预期工作了一段时间,并且突然间我发现它没有,所以我明白了
$ xinput get-button-map "ELAN Touchscreen Pen" 1 2 3 4 5
我必须手动重新映射它。
我尝试了几个“可疑”的东西,看看可能有什么责任归还,但我无法弄清楚。 这不是由
- 暂停笔记本电脑或关闭屏幕
- 旋转屏幕(这是可疑的,因为xinput用于旋转以转换输入矩阵。)
- 打开/关闭触摸屏,触摸板或手写笔输入(也使用xinput)。
重要更新 :
我发现这个问题不是手写笔特有的:我之前由于某种原因禁用了屏幕的手指触摸function(“ELAN触摸屏”):
$ xinput disable "ELAN Touchscreen"
我刚刚发现它自己回来了(手写笔右键再次恢复)。 因此,似乎所有xinput更改都会因为这个未知原因而恢复为默认值。
更新2
当发生这种情况时,我在/var/log/syslog
发现了一些可疑条目。 时间戳是在我实际上没有使用笔记本电脑一段时间的时间,因此节能function可能已激活(我在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-通用#35~16.04.1-Ubuntu 64位
-
xinput版本1.6.2
服务器上的XI版本:2.3
-
X.Org X Server 1.19.5
发布日期:2017-10-12
X协议版本11,修订版0
这似乎是一个错误(触摸屏设备随机断开并重新连接为新设备的事实,其具有将所有设置重置为默认值的副作用)。
作为一种解决方法,您可以创建自己的udev规则(基于Daniel Drake的这些建议的文件名),该规则将运行脚本,以便在触摸屏重新连接时重新应用xinput更改:
sudo nano /etc/udev/rules.d/10-custom-elan.rules
并添加包含“idVendor”和“idProduct”信息的这一行(来自您的系统日志 )。 必须使用“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,将其添加到服务器并通过将其写入$ HOME / .Xauthority将其传递给用户来授权与X服务器的连接。 然后,root用户应该能够通过了解用户使用的显示以及访问Xauthority cookie来进行连接。 这就是出口部门的目标。
注意 :显示器编号是硬编码的事实在某些情况下可能会导致问题,但在这种使用场景(个人笔记本电脑的单个用户)中,它可能没问题。