Một ứng dụng cần hai thứ để mở một cửa sổ trên màn hình X. Nó cần biết vị trí của màn hình X; điều đó được truyền tải bởi DISPLAY
biến môi trường. Nó cũng cần xác thực với máy chủ X. Điều này được truyền tải thông qua một cookie, là một giá trị bí mật được tạo bởi máy chủ X khi nó khởi động và được lưu trữ trong một tệp mà chỉ người dùng khởi động máy chủ X mới có thể truy cập. Tệp cookie mặc định là ~/.Xauthority
.
Nếu máy chủ X của bạn đang sử dụng vị trí tệp cookie mặc định, thì việc thêm Environment=XAUTHORITY=/home/dogs/.Xauthority
sẽ hoạt động (giả sử /home/dogs
là thư mục chính của người dùng đã đăng nhập dưới X). Nếu bạn cần tìm vị trí, hãy xem Tôi có thể khởi chạy chương trình đồ họa trên máy tính để bàn của người dùng khác với quyền root không? và Mở một cửa sổ trên màn hình X từ xa (tại sao không thể mở màn hình hiển thị X)?
Ngoài ra, chạy chương trình với tư cách là người dùng đang chạy máy chủ X sẽ hoạt động, miễn là tệp cookie nằm ở vị trí mặc định (nếu không, bạn sẽ phải định vị tệp cookie, như trong trường hợp gốc). Thêm User
chỉ thị (ví dụ User=dogs
).
Tất nhiên, dịch vụ sẽ không chạy nếu không có màn hình X theo số đó do người dùng bạn chỉ định sở hữu.
Thật kỳ lạ khi bắt đầu một chương trình GUI từ Systemd. Nó không được thiết kế cho việc này. Các chương trình GUI sống trong một phiên X, được bắt đầu bởi người dùng. Systemd là dành cho các quy trình hệ thống. Bạn nên thử nghiệm với daemon thay thế.
systemctl --user
. Ngoài ra cácDISPLAY
biến không phải là một vấn đề sau đó. Có một cái nhìn ở đây .