如何在启动/登录时运行 imwheel 以允许在移动鼠标时滚动

如何在启动/登录时运行 imwheel 以允许在移动鼠标时滚动

总结:

在大多数应用程序中,旋转滚轮的同时移动鼠标会阻止滚动的实际发生。imwheel 有帮助,但如何在启动或登录时运行它以使其真正起作用?

详细地:

我有一台 Windows 10 主机和一台 Ubuntu 20.04 客户机。客户机最初安装在 VMware 中,但我也将其(通过 OVF)导出到 VirtualBox 进行测试。在 VMware Player 中,我使用“未针对游戏进行优化”鼠标设置。
我连接了两个物理鼠标。一个是控制主机操作系统的普通鼠标(“主机鼠标”)。另一个传递到客户操作系统(“客户鼠标”)。下表显示了两个鼠标的移动和滚动组合以及客户操作系统正在执行的操作:
默认
红色表示无法运行,存在问题;橙色表示无法运行,但可以接受(对我来说)。FireFox
中没有出现此问题(到目前为止,这是我发现的唯一例外),但在“文本编辑器”、“设置”、“文件”以及对我来说最成问题的“Qt Creator”中,光标会移动,但窗口不会滚动。
我发现imwheel,它可以解决问题,但我无法弄清楚在启动或登录时运行它所需的神秘程序,以便它真正起作用。

为什么这么长?:

本来这是关于鼠标滚轮问题本身的,但最后我发现imwheel。我已经浪费了几个小时来测试和记录这一切,所以虽然我减少了,但我不想让这一切都白费。

我尝试过的:

我看到其他人遇到同样的问题,但没有(好的/适用的)解决方案:
https://communities.vmware.com/t5/VMware-Workstation-Pro/Mouse-scrolling-in-VM-guest-doesn-t-work-when-mouse-is-moving/td-p/2731610
添加了这些设置,没有变化。
https://communities.vmware.com/t5/Horizo​​n-Desktops-and-Apps/Mouse-wheel-does-not-work/td-p/2835340
已经打开,禁用并重新启用它,没有变化。
https://askubuntu.com/questions/1080542/mouse-scroll-doesnt-work-while-moving-pointer-on-vmware-workstation-with-ubuntu
尝试了 EN-US 键盘布局,没有变化。
尝试了 Arwez 建议的命令,没有变化。
https://unix.stackexchange.com/questions/446314/scrolling-impossible-while-moving-mouse-fedora-28-vm-guest-on-win10/498564#498564
尝试过后xev | grep -n -e "ButtonPress" -e "ButtonRelease",我可以看到鼠标滚轮在移动时有活动。VMware
xinput和 VirtualBox 均显示“虚拟核心 XTEST 指针”(ID 4)和“Logitech M325”(ID 12),然后显示两者之间不同的其他从属指针。我尝试使用以下方法分别禁用每个指针xinput disable 4
使用“BadAccess”禁用“虚拟核心 XTEST 指针”错误。
在所有其他情况下某物无法工作,但它从未按照预期的方式工作。

解决方法:

鼠标移动时滚轮不工作
在 VMware 中使用“针对游戏优化”的鼠标并在 VirtualBox 中禁用鼠标集成是可行的,但这不是一个很好的解决方案,因为这会使在客户机和主机之间切换变得非常烦人。VMware

在此处输入图片描述
虚拟盒:
在此处输入图片描述

车轮:

摘自这个答案:在 Linux 中移动鼠标指针时,鼠标滚轮不一致且不稳定
imwheel在控制台中以 root 或普通用户身份 运行可以修复此问题。
但我尝试让它自动运行的方法均无效:

初始化文件:
我考虑添加一个简单运行 imwheel 的文件/etc/init.d,但我找不到关于如何创建这样的文件或我在现有文件中找到的内容意味着什么(特别是注释标头的部分)的合理解释。

系统:
摘自本教程:https://linuxconfig.org/how-to-run-script-on-startup-on-ubuntu-20-04-focal-fossa-server-desktop
/etc/systemd/system/imwheel.service我创建了包含以下内容的 文件:

[Unit]
After=display-manager.service
[Service]
ExecStart=/usr/bin/imwheel > /home/user/Desktop/imwheel.txt 2>&1
[Install]
WantedBy=default.target

并运行这些命令并重新启动:

chmod 664 /etc/systemd/system/imwheel.service 
systemctl daemon-reload
systemctl enable imwheel.service

未创建 imwheel.txt 文件。

crontab-e:
我在 crontab 中添加了这两行并重新启动:

@reboot /usr/bin/imwheel > /home/user/Desktop/imwheel.txt 2>&1
@reboot echo "a" > /home/user/Desktop/echo.txt

创建了两个文件,echo.txt 包含“a”,但 imwheel.txt 包含以下内容:

INFO: imwheel started (pid=741)
Could not open display, check shell DISPLAY variable, and export or setenv it!

这种情况在 root 和普通用户身上都会发生。

启动应用程序:
摘自这个答案:https://askubuntu.com/questions/101197/how-can-i-make-an-application-start-up-when-i-login/101200#101200
我按下 Windows 键,搜索“启动应用程序”,单击唯一的结果,使用命令添加了一个新条目/usr/bin/imwheel > /home/user/Desktop/imwheel.txt 2>&1
imwheel.txt 文件未创建。

答案1

好吧,这实际上并不像想象的那么容易。创建 systemctl 用户单元是正确的方法,但您需要找到要等待的正确依赖项 - 只有在 X 显示器和会话准备就绪时,imwheel 才会工作。这是我在 Manjaro 5.15 + KDE 中使用的 imwheel.service 定义,一旦我登录到我的会话,它就可以可靠地启动 imwheel:

[Unit]
Description=IMWheel
After=plasma-kwin_x11.service
PartOf=graphical-session.target
[Service]
Type=simple
Environment=XAUTHORITY=%h/.Xauthority
Environment=DISPLAY=:0
ExecStart=/usr/bin/imwheel -kill -d
ExecStop=/usr/bin/pkill imwheel
RemainAfterExit=yes
Restart=on-failure
Slice=session.slice
[Install]
WantedBy=graphical-session.target

为了根据您的环境自定义此脚本,请运行并识别您的窗口管理器或类似程序systemctl --user status,查找其定义文件(可能位于)/usr/lib/systemd/user并调整上述服务定义。很可能需要您根据您的环境更改After=Slice=和。PartOf=WantedBy=

相关内容