我已在 xRDP 中按如下方式配置了我的 10 键鼠标,以便用于 Hyper-V 增强会话:
Option "Buttons" "10"
Option "ButtonMap" "1 2 3 4 5 8 9"
"xbindkeys -xsendevent -text "\[XF86Back]""
b: 6
"xbindkeys -xsendevent -text "\[XF86Forward]""
b: 7
这适用于前 7 个按钮(标准 3 + 4 轴滚动)。但是,检查 xev 时,我发现按钮 6 和 7 的映射每次点击都会触发两次。退出 xbindkeys 时,XF86Back 事件永远不会发送。除非我映射到 XF86Back/Forward,否则 Chrome 不会响应按钮 6 和 7。有人对如何消除额外的按键有什么建议吗?
答案1
这个问题仍未解决。仔细检查 xev 发现,按钮 6 和 7 以及按钮 8 和 9 分别返回按钮 6 和 7 的按下。按钮 8 和按钮 9 的代码根本没有发送。这是一个 Logitech Ergo 轨迹球,因此也许 Windows 驱动程序与此有关(通过增强会话/xrdp 通过 Hyper-V 管理器运行)。无论如何,无法区分这两组按钮。
我移除了 ButtonMap 并禁用了 8-10 号按钮。这样我仍然可以进行 4 轴滚动,但我使用键盘来向前/向后移动。可惜我已经习惯了。
答案2
这是解决此问题的方法。虽然不太好,但对我来说足够可靠。
.xbindkeysrc 配置允许指定任意命令。通过使用存储在用户主目录中的临时文件,可以保存按钮按下的当前状态并在第二次按下时检索。这样第二次按下将被忽略并删除临时文件。
"if [ -f ~/.xbindkeys_back_pressed ]; then rm ~/.xbindkeys_back_pressed; else touch ~/.xbindkeys_back_pressed; xbindkeys -xsendevent -text '\[XF86Back]'; fi"
b:6
"if [ -f ~/.xbindkeys_forward_pressed ]; then rm ~/.xbindkeys_forward_pressed; else touch ~/.xbindkeys_forward_pressed; xbindkeys -xsendevent -text '\[XF86Forward]'; fi"
b:7
就我而言,xbindkeys 似乎不支持 xsendevent,因此我改用 xte。
"if [ -f ~/.xbindkeys_back_pressed ]; then rm ~/.xbindkeys_back_pressed; else touch ~/.xbindkeys_back_pressed; xte 'keydown Alt_L' 'keydown Left' 'keyup Left' 'keyup Alt_L'; fi"
b:6
"if [ -f ~/.xbindkeys_forward_pressed ]; then rm ~/.xbindkeys_forward_pressed; else touch ~/.xbindkeys_forward_pressed; xte 'keydown Alt_L' 'keydown Right' 'keyup Right' 'keyup Alt_L'; fi"
b:7