Jak uruchomić program X spoza sesji X (np. z konsoli lub SSH) [zamknięty]

Nie będąc osobą zalogowaną na konsoli, jak uruchomić aplikację X i wyświetlić ją na tej sesji X? Załóżmy, że jestem albo root, albo jestem tym samym użytkownikiem, który się zalogował, więc w zasadzie mam persmisję, aby to zrobić. Ale jak mam przekonać X do tego?

Kilka przykładów takich sytuacji:

  • Zaloguj się przez SSH i uruchom program, który wyświetla się na ekranie zdalnego komputera (a nie tunelowany przez SSH-to zupełnie co innego)
  • a cron zadanie wykonania zrzutu ekranu sesji X za pomocą polecenia ImageMagick import
  • uruchamianie rejestratora klawiszy do celów audytu

Jest to prostsza wersja Uruchom aplikację OpenGL prosto z terminala Linuksa bez okien

Author: Community, 2009-10-18

2 answers

Krótka odpowiedź jest taka, że musisz ustawić zmienną środowiskową DISPLAY, a następnie aplikacja uruchomi się.

Długa odpowiedź jest taka, że mamy Xauth i chyba, że używasz tego samego Użytkownika na tej samej maszynie, która prawdopodobnie nie zadziała, chyba że wyeksportujesz poświadczenie Xauth z konta z serwerem X na konto z klientem X. ssh -X obsługuje to za ciebie, dlatego jest to niesamowite, ale ręczna procedura polega na uruchomieniu xauth extract - $DISPLAY na koncie serwera X i podawanie tych danych do xauth merge - na konto klienta. (Ostrzeżenie: dane są binarne.)

Na nowoczesnych systemach Linux jest jedna sesja X w :0, a plik danych autorytetu X11 jest zawsze $HOME/.Xauthority, więc najczęściej można ustawić dwie zmienne środowiskowe, na przykład w Bash:

export XAUTHORITY=/home/$your_username/.Xauthority
export DISPLAY=':0'
 42
Author: hobbs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-06 11:06:50

Wynik jest taki, że musisz znać wyświetlacz X (umieszczony w zmiennej środowiskowej DISPLAY) i magiczne ciasteczko (umieszczony w pliku o nazwie pliku w zmiennej środowiskowej XAUTHORITY).

Szybki i brudny sposób

W systemie z systemem X, jeśli jesteś rootem lub jesteś tym samym użytkownikiem, który zalogował się do X, po prostu załóż najczęstsze pliki display i cookie (działa na prawie każdej standardowej instalacji na pulpicie dowolnej dystrybucji).

env DISPLAY=:0 XAUTHORITY=/home/whoever/.Xauthority /path/to/my/X/program

The more surefire way

Znajdź ich ze środowiska już uruchomionego programu X. Ponownie, jeśli jesteś rootem lub tym samym użytkownikiem, który jest zalogowany, powie Ci to (jeśli użytkownik używa GNOME):

cat /proc/`pgrep -f ^x-session-manager`/environ \
  | ruby -ne 'puts $_.split("\0").select { |e| e =~ /^(DISPLAY|XAUTHORITY)=/ }'
 17
Author: JasonSmith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-18 09:11:50