저는 다양한 그래픽 프로그램을 호스팅하는 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 확장(참고자료 참조)이 있는 경우 루트 창을 호출하여 프로그램이 끝날 때까지 모든 커서를 숨기는 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
는 프로그램이 중단될 때까지 커서가 나타나지 않습니다.