Jeśli w systemie działa wiele X Windows, czy jest możliwe uruchomienie programu w określonym oknie? Jak rozpoznajesz okno i uruchamiasz program?
Zakładam, że mam wszelkie uprawnienia niezbędne do uruchomienia takiego programu.
Jeśli w systemie działa wiele X Windows, czy jest możliwe uruchomienie programu w określonym oknie? Jak rozpoznajesz okno i uruchamiasz program?
Zakładam, że mam wszelkie uprawnienia niezbędne do uruchomienia takiego programu.
Odpowiedzi:
Programy X wiedzą, z którą sesją X mają rozmawiać, patrząc na DISPLAY
zmienną środowiskową.
Najpierw musisz dowiedzieć się, co DISPLAY
jest ustawione w sesji X, w której chcesz uruchomić swój program. Zrób to, wydając polecenie echo $DISPLAY
w X-terminalu w tej sesji X. Zazwyczaj pobiera się coś takiego jak :0.0
wyjście.
Powiedzmy, że chcesz uruchomić doskonały program xclock
w sesji X, gdzie DISPLAY
jest :0.0
, ale chcesz to zrobić na konsoli. Następnie naciśnij klawisze Alt-Ctrl-F1, aby przejść do tej konsoli, a następnie wpisz:
DISPLAY=:0.0 xclock # variables set w/ a command are local to that command
Następnie wróć do X, naciskając klawisze Alt-Ctrl-F7 lub Alt-Ctrl-F8 (lub może jakiś inny klawisz F, w zależności od smaku Linuksa) i obserwuj nowy ładny zegar ścienny, który tam masz.
W rzeczywistości mogłeś wykonać powyższe polecenie w dowolnej powłoce na tym samym komputerze (przez SSH, w dowolnej sesji X, na dowolnej konsoli itp.) - fakt, który określiłeś DISPLAY=:0.0
przed poleceniem oznacza, że xclock
okno zawsze będzie się pojawiało ta sama sesja X.
W rzeczywistości - oprócz tego, że patrzą na to programy X - w tej DISPLAY
zmiennej nie ma nic specjalnego . Zwykle, kiedy uruchamiasz programy z terminala X, zaczynają się we właściwym miejscu, ponieważ DISPLAY
zostało już dla ciebie ustawione.
Zamiast używać powyższego polecenia, możesz również podzielić je na dwa, najpierw ustawiając DISPLAY
, a następnie uruchamiając xclock
. W takim przypadku DISPLAY
ustawienie będzie obowiązywać , dopóki nie zamkniesz tej powłoki, a wszystkie kolejne uruchomione programy X otworzą się w tej samej sesji X co xclock
.
# variables set w/o a command are local to the shell,
export DISPLAY=:0.0 # unless exported
xclock
DISPLAY
domyślnie zostanie ustawiony eksport, ponieważ jest importowany przez powłokę (działa zarówno w moim przypadku, jak zsh
i dash
dla mnie bez użycia export
). Ale tak, jeśli nie można dostać wersję dwóch linii do pracy, spróbuj wymienić DISPLAY=:0.0
z export DISPLAY=:0.0
.
Zwykle programy klienckie X używają DISPLAY
zmiennej środowiskowej, aby wiedzieć, z którym serwerem X można się połączyć. Niektóre programy akceptują również parametr wiersza polecenia ( -display
lub coś podobnego), którego można użyć do zastąpienia DISPLAY
zmiennej środowiskowej.