私は、さまざまなグラフィックプログラムをホストするXサーバーを実行するキオスクシステムを持っています。すべてのプログラムは、システムユニットがクラッシュするため、相互に排他的です。これらのプログラムのいくつかでは、デフォルトのX11カーソルを使用したいと思います。クロス。そのアプリケーションのsystemd単位で設定できますxsetroot
。xsetroot
あるいは、他のツールを使ってカーソルを隠すこともできますか?Xサーバーを再起動する必要はありません。?
私が除外したオプションは次のとおりです。
-nocursor
Xサーバー用のパラメータ - ランタイム全体にわたってすべてのアプリケーションのカーソルが無効になります。unclutter
- 移動しないときだけでなく、実行時にそのアプリケーションからカーソルを隠すことを望みます。
[Unit]
Description=Plain X.org server
After=plymouth-quit-wait.service
[email protected] display-manager.service
[Service]
Type=simple
Environment=DISPLAY=:0
ExecStart=/usr/bin/Xorg vt7 -nolisten tcp -noreset -nocursor
# Wait for server to be ready and set kiosk configuration.
ExecStartPost=/usr/bin/kiosk
# Set chicken as cursor to be able to test touch screen
# and see whether X server is actually running.
ExecStartPost=/usr/bin/xsetroot -cursor_name tcross
Restart=on-failure
RestartSec=3
[Install]
WantedBy=graphical.target
ベストアンサー1
X11サーバーにXFIXES拡張(参考資料を参照)がある場合は、rootウィンドウを呼び出して、プログラムが終了するまですべてのカーソルを隠すxdpyinfo
小さなCプログラムを作成できます。インクルードファイルを含めるには、XFixesHideCursor()
一部のX11開発パッケージ(libXfixes-devel
ディストリビューションなど)をインストールする必要があります/usr/include/X11/extensions/Xfixes.h
。nocursor.c
保存するファイルを作成します。
/* https://unix.stackexchange.com/a/726059/119298 */
/* compile with -lX11 -lXfixes */
/* https://www.x.org/releases/current/doc/fixesproto/fixesproto.txt */
#include <X11/Xlib.h>
#include <X11/extensions/Xfixes.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
Display *display = XOpenDisplay(NULL);
if(display==0)exit(1);
int screen = DefaultScreen(display);
Window root = RootWindow(display, screen);
XFixesHideCursor(display, root);
XSync(display, True);
pause(); /* need to hold connection */
return 0;
}
そしてgcc -o nocursor nocursor.c -lX11 -lXfixes
。./nocursor
適切な環境でsetを実行した後は、プログラムがDISPLAY
中断されるまでカーソルは表示されません。