Oto inne pytania, które moim zdaniem powinienem wiedzieć:
Z sesji innej niż X? (co oznacza, że root nie jest zalogowany w X)
Jeśli na X zalogowanych jest wiele osób, czy mogę automatycznie wykryć, kto był na jakim ekranie, a tym samym programowo wykryć, na którym ekranie muszę uruchomić aplikację?
Czy mogę uruchomić aplikację jako użytkownik? (ok, jestem na 99,999% pewien, że to tak)
Czy mogę wykryć, czy użytkownicy z grupy X są zalogowani w X?
naga_plugged.pl
skrypt się zakończył (lub przełącza się w tło), ponieważudev
będzie czekał na zakończenie.Odpowiedzi:
Aby uruchomić program graficzny na pulpicie użytkownika, musisz znaleźć dwie rzeczy: na jakim ekranie wyświetla się pulpit użytkownika (adres) i jakiego pliku cookie autoryzacji użyć (hasło).
Następujące polecenie powinno wyświetlić listę wyświetlaczy lokalnych, na których użytkownik jest zalogowany (po jednym w wierszu) w większości jednorożców:
Znalezienie pliku cookie autoryzacji jest nieco trudniejsze. Musisz poszukać pliku cookie użytkownika, który jest
~/.Xauthority
domyślnie (wszystko czego potrzebujesz to lokalizacja pliku cookie, nie musisz go wyodrębniać). Działa to na wielu systemach, ale nie na wszystkich; zależy to od menedżera wyświetlania i jego konfiguracji, w szczególności Gdm (domyślny w Ubuntu) nie używał domyślnej lokalizacji podczas ostatniego wyszukiwania. Nie mogę wymyślić przenośnego sposobu na znalezienie rzeczywistego pliku cookie X. Najdokładniejszym sposobem sprawdzenia tego jest ustalenie pid procesu X i poszukiwanie argumentu-auth
opcji. Innym sposobem jest znalezienie procesu działającego na tym serwerze X iXAUTHORITY
pobranie jego zmiennej środowiskowej. Jeśli masz problemy ze znalezieniem pliku cookie, zobaczOtwórz okno na zdalnym wyświetlaczu X (dlaczego „Nie można otworzyć wyświetlacza”)?Po uzyskaniu obu informacji umieść wybrany ekran w
DISPLAY
zmiennej środowiskowej, wybrany plik cookie autoryzacji X wXAUTHORITY
zmiennej środowiskowej i gotowe. Nie ma znaczenia, jakiego użytkownika uruchamia program; połącz z,su
jeśli chcesz.źródło
ps
orhtop
or…pids=$(pgrep -u $target_user nautilus)
dostaję pid i gdzie muszę umieścić-auth
opcję?-auth
opcji. Być może trzeba będzie poszukać go w wierszu polecenia procesu X serwera, aby dowiedzieć się, co umieścić wXAUTHORITY
zmiennej środowiskowej. Jeśli masz proces klienta, nie potrzebujesz niczego,-auth
ale wartośćXAUTHORITY
zmiennej tego klienta . Nie rozumiem, co próbujesz zrobić. Możesz zadać nowe pytanie.Nie mogę tego całkowicie wypróbować, ponieważ wszystkie moje maszyny mają wyłączony root.
Aby dowiedzieć się, który ekran jest włączony, możesz użyć
who
polecenia. Ostatnią kolumną danych wyjściowych jest zwykle WYŚWIETLACZ, na którym użytkownik jest zalogowany. Coś takiego można wykorzystać do przechwycenia samego wyświetlacza (istnieje prawdopodobnie znacznie bardziej wydajny sposób, aby to zrobić, zachęcamy do zaoferowania edycji):Następnie, aby uruchomić graficzne polecenie X na tym ekranie:
gdzie: 0 zostanie zastąpione dowolnym wyświetleniem znalezionym w pierwszym poleceniu, a Firefox zostanie zastąpione dowolnym poleceniem, które chcesz uruchomić. Możesz umieścić to w skrypcie powłoki i po prostu użyć zmiennej.
Następna część to część, której nie testowałem, ale nie rozumiem, dlaczego nie powinno być to możliwe:
aby uruchomić polecenie X jako ten użytkownik.
źródło
sudo -i
i nie byłem pewien, czy wyniki będą inne niż uruchomienie go po zalogowaniu bezpośrednio jako root. :-)who | grep xeno| awk '{print $5}' | sed 's/[(|)]//g' | grep -v ^$
wydaje się działać ...Możesz spojrzeć na to, jak robi to ostry. Np. Kiedy wydaje polecenia xscreensaver lub pusto ekran dla każdego użytkownika uruchamiającego X lub X-sesję.
Na przykład w systemie Ubuntu ten plik zawiera powiązane rzeczy:
Zawiera tę pętlę:
źródło
/usr/share/acpi-support/power-funcs
. Wywołuje,fgconsole
aby znaleźć aktywny Linux vt, a następnie szuka serwera X wyświetlanego na tej konsoli i stamtąd wyszukuje użytkownika. Następnie używa go~/.Xauthority
jako pliku cookie X, co oznacza, że jeśli czegoś nie brakuje, oznacza to, że tak naprawdę nie będzie w stanie połączyć się z serwerem X (domyślna konfiguracja Ubuntu za pomocą gdm nie przechowuje plików cookie X w domu użytkownika informator).getXuser: command not found
Rozszerzenie odpowiedzi Gillesa polega na tym, jak znaleźć plik cookie. Jednym ze sposobów może to być po ustawieniu
DISPLAY
zmiennej środowiskowej (zgodnie z opisem Gillesa), użyjstrace
do znalezieniaxhost
dostępu do plików . Mogę wymyślić coś takiego w BASH:Dane wyjściowe powyższego kodu będą wyglądać następująco:
Jak wyraźnie widać, plik cookie pojawi się bezpośrednio tutaj.
źródło
Podczas moich badań nad znalezieniem eleganckiego sposobu wyświetlania GUI lub zadania X z ograniczonego środowiska, takiego jak reguły udev lub superużytkownik, niedawno stworzyłem narzędzie, które do niego pasuje ( więcej szczegółów ).
xpub
to skrypt powłoki, aby uzyskać zmienne środowiska wyświetlania X dotyczące bieżącego lub danego TTY.To jest przykład z regułą udev:
$env{ENV}
: jeśli bieżący użytkownik tty uruchomi X, w przeciwnym razie usuń go.Zasada jest taka sama w przypadku wiersza polecenia przy użyciu
export
:źródło