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 DISPLAYzmienną środowiskową.
Najpierw musisz dowiedzieć się, co DISPLAYjest ustawione w sesji X, w której chcesz uruchomić swój program. Zrób to, wydając polecenie echo $DISPLAYw X-terminalu w tej sesji X. Zazwyczaj pobiera się coś takiego jak :0.0wyjście.
Powiedzmy, że chcesz uruchomić doskonały program xclockw sesji X, gdzie DISPLAYjest :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.0przed poleceniem oznacza, że xclockokno zawsze będzie się pojawiało ta sama sesja X.
W rzeczywistości - oprócz tego, że patrzą na to programy X - w tej DISPLAYzmiennej nie ma nic specjalnego . Zwykle, kiedy uruchamiasz programy z terminala X, zaczynają się we właściwym miejscu, ponieważ DISPLAYzostał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 DISPLAYustawienie 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
DISPLAYdomyślnie zostanie ustawiony eksport, ponieważ jest importowany przez powłokę (działa zarówno w moim przypadku, jak zshi dashdla mnie bez użycia export). Ale tak, jeśli nie można dostać wersję dwóch linii do pracy, spróbuj wymienić DISPLAY=:0.0z export DISPLAY=:0.0.
Zwykle programy klienckie X używają DISPLAYzmiennej środowiskowej, aby wiedzieć, z którym serwerem X można się połączyć. Niektóre programy akceptują również parametr wiersza polecenia ( -displaylub coś podobnego), którego można użyć do zastąpienia DISPLAYzmiennej środowiskowej.