如何隐藏鼠标光标

我正在使用Ubuntu Precise在触摸屏上建立一个信息亭。现在我正在寻找合适的方法来隐藏鼠标指针。因为人们知道他们在指向哪里,所以在他们的手指下显示一个箭头是没有用的,而且在他们最后指向的地方显示一个箭头更加无意义。
我最好的选择可能是一种只包含透明光标的光标主题。我有点惊讶地发现在默认的Unity UI中没有切换和安装光标主题的用户界面,但由于我不会使用Unity,这并不是什么大问题。根据“update-alternatives --list x-cursor-theme”列出的备选项都是指向“.theme”文件的,所以我搜索了一下软件包列表。结果列表中没有列出任何可能的候选项,即没有包含“invisible”或“transparent”字样的软件包。
到目前为止,一些谷歌搜索结果中的“XCursor Transparent Theme”的自述文件是我最好的选择。这意味着我需要自己编译这些源代码,可能将它们放入我的PPA中。对于那个自述文件的日期是2003年,我对这个结果有些怀疑。而且我也不确定是否让事情变得过于复杂了。毕竟,在Precise中对触摸设备有相当多的支持,所以我不相信我是第一个想要摆脱鼠标指针的人。
  • 是否有其他方法不涉及用户编译的二进制代码?
  • 是否有透明光标的主题包我忽略了?
  • 是否有其他机制可以使光标消失而不改变光标主题?

我将使用Matchbox WM、Firefox和Java小程序,所以我会满意任何在这种设置下工作的解决方案。我对任何与Gnome或Compiz相关的解决方案都不感兴趣,因为我将不会运行它们。

7个回答

试试 unclutter

该程序的目的是在鼠标静止一段时间后隐藏指针。使用它,您可以使指针仅在用户触摸屏幕时出现,并在之后立即消失。也许这不完全符合您的期望,但比起您的另一种选择要简单得多。

要使用它,首先安装它:

sudo apt-get install unclutter

然后运行它:

unclutter -idle 0.01 -root

上述命令中的数字是指指针消失前的秒数(在本例中为1/100秒)。

2如果你将这个解决方案与一个看起来像小环的图标主题结合起来,即使有0.1秒的延迟,它也应该看起来非常漂亮。在这种情况下,延迟将作为视觉确认,显示屏检测到了触摸。 - Mikko Rantalainen
酷的想法! 你有这样的主题吗? 我很想添加一个建议到回答中。 - josinalvo
2抱歉,我不知道有现成的主题。手动创建这样的主题应该不太难。创建一个合适的PNG文件,并使用xcursorgen创建X11光标文件。然后您需要编写cursor.theme文件,将光标文件放在子目录cursors中,并从整个内容创建一个ZIP文件。有关更多详细信息,请参阅http://www.ehow.com/how_5026012_make-cursors-file-ubuntu.html和http://www.freedesktop.org/wiki/Specifications/cursor-spec/?action=print以及一些现有的主题http://gnome-look.org/?xcontentmode=36。 - Mikko Rantalainen
与NoMachine的完美共生真是太棒了!谢谢! - Aquarius Power
有时候使用清理无用元素可能会使应用程序失去焦点,例如在浏览网页时,鼠标滚轮可能不起作用,直到你点击或移动鼠标指针。记住这一点,这样你就不会像我一样认为这是浏览器的错误 ;) - golimar


3太棒了!这个回答对我来说只有这样才有效:startx -- -nocursor - czerasz
9在X启动后有没有办法更改这个变量? - Aaron Franke
@AaronFranke 你可以使用 unclutter -idle 0.0001 --start-hidden --jitter 999999 --ignore-scrolling --ignore-buttons 1,2,3 这个命令,它会隐藏窗口直到你终止该命令,但有时可能会闪烁和出现。 - Heath Mitchell

如果您正在使用lightdm:
请编辑/etc/lightdm/lightdm.conf文件,添加以下内容:
xserver-command=X -bs -core -nocursor

如果您正在使用nodm:
通过替换,编辑/etc/default/nodm文件:
NODM_X_OPTIONS='-nolisten tcp'

使用

NODM_X_OPTIONS='-nolisten tcp -nocursor'

这是根据Gibbs非常有帮助的回答所建造的建筑物。

-bs和-core真的有必要吗?我的lightdm默认是普通的X,将设置为xserver-command=X -nocursor可以隐藏光标。 - Andreas
1@Andreas,在我写这篇文章的时候,我的lightdm.conf文件中有"-bs -core"参数。如果你的文件中没有这些参数,我猜想它们可能是不必要的。我只需要添加"nocursor"就可以使其工作。 - Peter

Ubuntu 16.04

打开/usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf并编辑此行:

xserver-command=X -core

-nocursor添加到它后面。像这样:
xserver-command=X -core -nocursor

保存并重新启动。
警告:与其他答案一样,此文件上的错误将阻止Xorg初始化。无论如何,您仍然可以登录到终端并恢复。

注意:这可能会破坏您机器上的登录。请谨慎使用。 - Igor Pejic
1@Igor 虽然你说得有道理,但是这个文件的错误会阻止 Xorg 的初始化。所以用户仍然可以登录到终端并恢复。无论如何,我会在这里加上一句提醒。 - Rael Gugelmin Cunha

另一个我找到的选择是使用xbanish
  1. 将存储库克隆到您选择的目录中
git clone https://github.com/jcs/xbanish

(可选)我必须确保已经安装了libxt-dev
sudo apt install libxt-dev

确保你处于 xbanish 目录下,只需运行以下命令来创建文件。
make

现在你可以开始运行了
./xbanish

请注意,只有在程序运行时,这个解决方案才能起作用,所以你可能也希望将其设置为开机自启动。


新的x11版本的Unclutter有一些值得注意的选项,比如开始时隐藏和触摸隐藏。[链接1](https://github.com/Airblader/unclutter-xfixes/blob/master/src/unclutter.c)中有更多信息。
修改unclutter.c文件。
配置config = { .timeout = 0, //默认为5 .jitter = 0, .exclude_root = false, .ignore_scrolling = false, .ignore_buttons.count = 0, .ignore_buttons.buttons = NULL, .hide_on_touch = true, //默认为false .fork = false, .debug = false, .onescreen = false, .ignore_matches = false, .matches = NULL, .start_hidden = true //默认为false };