Czy można wybrać, na którym ekranie X powinna działać instancja programu?

10

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.

vfclists
źródło

Odpowiedzi:

15

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
zrajm
źródło
1
Zauważ, że ostatni bit nie zadziała, chyba że najpierw wyeksportujesz zmienną powłoki do środowiska.
Ignacio Vazquez-Abrams,
Myślę, że 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.
zrajm
1

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.

Laszlo Valko
źródło