Bu, Ubuntu 26.04’te 30 saniyede Chromium Kiosk kurulumu yazısının devamı ve tek X server ile ikinci ekranda ikinci program çalıştırma yaklaşımının alternatifidir.
TL;DR: Aynı anda görünür iki X server (:0 ve :1) tek GPU’yu paylaşamaz. İkinci server başlangıçta drmSetMaster failed: Device or resource busy ile ölür. Bu kurulum sadece iki GPU’nuz varsa (veya ayrı bir seat’teki USB DisplayLink adaptörü gibi ikinci bir görüntü cihazı) çalışır. Tek GPU’da bunun yerine tek-X-server yaklaşımını kullanın — gerçekten çalışan odur.
Ne denedik ve nerede başarısız oluyor
Fikir: ekran 1 için startx ... :0 çalıştıran mevcut kiosk.service‘i tut ve ekran 2 için :1‘de ikinci bir X server çalıştıran kiosk2.service ekle. Kiosk için bu cazip — her ekran kendi DISPLAY‘ini, kendi oturumunu alır ve crash/restart’lar bağımsızdır.
Problem 1: startx konsolu bulamıyor
systemd servisi içindeki ikinci startx hemen başarısız olur:
(startx)[4247]: pam_unix(login:session): session opened for user kiosk(uid=1001) by kiosk(uid=0)
startx[4283]: Couldn't get a file descriptor referring to the console.
kiosk2.service: Main process exited, code=exited, status=1/FAILUREsystemd servislerinin controlling terminal’i yoktur, bu yüzden startx VT’yi otomatik algılayamaz. Servise TTYPath=/dev/tty7 + StandardInput=tty vermek algılamayı düzeltir ama PAM login oturumunu takıltır — tty7 ilk X server altında zaten grafik modunda (KD_GRAPHICS), bu yüzden üzerinde konsol I/O yapmaya çalışan her şey sonsuza dek bloklanır.
Problem 2: Sadece bir DRM master’a izin var
startx‘i atlayıp Xorg :1‘i doğrudan çalıştırmak daha ileri gider — server GPU’yu probe eder, hatta glamor’u initialize eder — ama sonra ölür:
(II) xfree86: Adding drm device (/dev/dri/card1)
(II) modeset(0): glamor: Using OpenGL 4.6 context.
(II) modeset(0): glamor X acceleration enabled on AMD Radeon Vega 8 Graphics (...)
(EE) modeset(0): drmSetMaster failed: Device or resource busy
(EE) AddScreen/ScreenInit failed for driver 0
(EE) Server terminated with error (1).Kernel modesetting ile aynı anda tam bir process /dev/dri/card*‘ın DRM master’ı olabilir. :0 server’ı VT’si aktif olduğunda master’ı kapar ve — VT-switch yapamadığımız için (switch ekran 1’i karartır) — asla bırakmaz. -sharevts -novtswitch yardım etmez: bu flag’ler Xorg’un VT switch yapmasını durdurur ama ikinci server modeset için hâlâ DRM master’a ihtiyaç duyar ve onu alamaz. Eski çoklu Zaphod-head tarifleri KMS driver’larından önceye ait; artık geçerli değiller.
İki X server’ın çalıştığı durumlar
- İki GPU: her Xorg farklı
/dev/dri/card*‘ın master’ı olur. Her kartıloginctl attachveya udevID_SEATtag’leriyle kendi seat’ine ata, her server’a kendi VT’sini ver ve gerçek multiseat elde et. - USB görüntü adaptörleri (DisplayLink/udl): adaptör ayrı bir DRM cihazıdır, yani ikinci bir Xorg ona sahip olabilir.
Tek GPU’da bunun yerine ne yapmalı
İki monitöre yayılan tek X server kullan ve ikinci uygulamayı monitör 2’ye sabitle — normal uygulamalar için openbox rc.xml <monitor>2</monitor> kuralıyla veya --kiosk Chromium (openbox yerleşimini yok sayar) için xdotool/wmctrl pencere taşımayla. Tam talimatlar: Tek X server ile ikinci ekranda ikinci program çalıştırma.
Yaklaşımdan bağımsız bir bonus ipucu: kiosk unit’inin [Service] bölümüne TimeoutStopSec=5 ekle. Varsayılan 90s stop timeout, X crash’in ortasındayken her systemctl restart kiosk.service‘i bir buçuk dakika takıltır.