Komenda 'gnome-screensaver-command -l' nie blokuje ekranu

Tematy specyficzne dla poszczególnych window managerów: KDE, GNOME, XFCE, Fluxbox, Blackbox, IceWM, WindowMaker, itd. - wszystko tutaj.
blipinsk
Piegowaty Guziec
Piegowaty Guziec
Posty: 1
Rejestracja: 28 mar 2012, 23:02
Wersja Ubuntu: 11.10
Środowisko graficzne: GNOME

Komenda 'gnome-screensaver-command -l' nie blokuje ekranu

Post autor: blipinsk »

Muszę od razu przestrzec, że moja przygoda z Ubuntu trwa mniej więcej od 4 dni, więc nie zlinczujcie mnie od razu jeśli okaże się, że robię po prostu jakiś całkowicie podstawowy błąd... :-D

Historia jest taka, że mam postawiony serwer na Ubuntu Server 11.10, do którego potrzebuję mieć zdalny dostęp np. przy użyciu VNC. Zainstalowałem na nim GNOME i uruchomiłem w nim vino, co po odpaleniu serwera i zalogowaniu się z pomocą fizycznie podpiętych do serwera klawiatury i monitora, działa całkiem nieźle. Problem był tylko taki, że chciałem mieć możliwość zdalnego zrestartowania serwera i ponownego podłączenia się przez VNC do serwera. Żeby temu zaradzić umieściłem w /etc/init/x11vnc.conf taki oto skrypt:

Kod: Zaznacz cały

start on login-session-start
script
x11vnc -rfbport 5900 -display :0 -auth /var/run/lightdm/root/:0 -forever -bg -o /var/log/x11vnc.log -noxrecord -noxfixes -noxdamage -nomodtweak -repeat
end script
co doskonale załatwiło sprawę...
Potrzebowałem jeszcze tylko by, przy każdym podłączeniu do serwera vnc lub po każdym od niego odłączeniu, blokowany był ekran i trzeba było wpisać hasło. Dlatego też do wywołania x11vnc w skrypcie dodałem jeszcze:

Kod: Zaznacz cały

-gone 'gnome-screensaver-command -l'
(próbowałem też zamiast -gone wstawiać -afteraccept). Niestety nie daje to spodziewanego efektu, gdyż tylko aktywuje wygaszacz ekranu, ale go nie blokuje. Co dziwne jednak wywołanie tej samej komendy co w skrypcie tyle, że już po zalogowaniu się na serwer (no i na inny port), skutkuje działaniem dokładnie takim jakie jest oczekiwane - blokowaniem ekranu po podłączeniu się lub odłączeniu się do/od serwera VNC. Czy ktoś ma może pomysł dlaczego to działa właśnie tak a nie tak jak powinno?
Ostatnio zmieniony 29 mar 2012, 00:14 przez blipinsk, łącznie zmieniany 1 raz.
jedreg
Piegowaty Guziec
Piegowaty Guziec
Posty: 1
Rejestracja: 27 maja 2012, 00:47

Re: Komenda 'gnome-screensaver-command -l' nie blokuje ekranu

Post autor: jedreg »

Witaj,
też walczyłem z tym zjawiskiem konfigurując mini-itx-owy serwerek w sieci domowej. W moim przypadku potrzebuję tylko dostęp dla jednego użytkownika: serwer Xów wita ekranem logowania plus proste zabezpieczenie lockscreenem po zerwaniu połączenia.

Dlaczego opcja -gone 'gnome-screensaver-comman -l' nie blokuje ekranu? Ze względu na uwierzytelnianie. Z dokumentacji wynika, że tylko właściciel sesji (lub ściślej właściciel procesu 'gnome-screensaver') może skutecznie wysłać do niego komendę blokowania ekranu. Widać to jak w terminalu spróbujesz wykonać polecenie blokowania jako aktualny uzytkownik, wtedy się udaje, a jeśli zrobisz to jako inny user (np root), tylko wygasi się ekran ale nie zablokuje. Ponieważ process x11vnc jest uruchomiony z uprawnieniami root-a, to z tymi uprawnieniami jest wykonywany skryp opcji "-gone" i dlatego nie działa. Wystarczy zatem wykonać blokowanie z aktualnie zalogowanym userem, czyli coś w stylu -gone 'sudo -u $XUSER gnome-screensaver -l', gdzie $XUSER to zalogowany do X11 user. Niestety na poziomie komendy x11vnc "nie widać" sesji X, więc znalezienie właściciela trzeba zrobić "ręcznie".

Moje proste rozwiązanie polega na wybraniu nie-root-owego właściciela sesji w liście procesów, które dla uproszczenia interpretacji komend umieściłem w osobnym skrypcie. Całość to coś w tym stylu:

Kod: Zaznacz cały

x11vnc ... -gone 'x11vnc-lock-when-gone.sh'
oraz tresc referowanego skryptu:

Kod: Zaznacz cały

#!/bin/sh
SESSION_OWNER=`ps aux | grep gnome-session | awk '$1!="root"{print $1; exit}'`
sudo -u $SESSION_OWNER gnome-screensaver-command --lock
(zapewne można to oskryptować lepiej/schludniej/itp ale nie robie tego na codzien :) )

pozdrawiam,
andrzej.
ODPOWIEDZ

Wróć do „Środowiska graficzne”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 3 gości