Aby móc zamknąć system za pomocą skrótu klawiaturowego , możemy przypisać gnome-session-quit ---power-off
niestandardowy skrót.
W Unity spowoduje to wyświetlenie następującego okna dialogowego:
Następnie potrzebujemy kolejnych co najmniej dwóch naciśnięć klawiszy, aby w końcu wyłączyć nasz system. Jest to raczej niewygodne i wolałbym stare okno dialogowe zamykania, w którym można było wyłączyć, naciskając Returnlub pozwalając mu czekać domyślnym odliczaniem 60 sekund.
Podczas wywoływania gnome-session-quit --poweroff
z sesji flashowania sesji GNOME w tym samym systemie (14.04 LTS) powraca stare okno dialogowe zawierające odliczanie:
Więc wiemy, że gdzieś mieszka.
Czy jest jakiś sposób na wywołanie tego starego okna dialogowego podczas uruchamiania sesji Unity?
źródło
Odpowiedzi:
Oto skrypt do naśladowania pożądanego zachowania. Musi być prowadzony jak z
sudo
. Można powiązać ze skrótem klawiaturowym (ze wstępnym dodaniemshutdown
polecenia do pliku sudoers, aby umożliwić uruchomienie bez hasła ). Prosty, zwięzły i spełnia swoje zadanie.Aktualizacja: 14 czerwca
Jak sugeruje Takkat, oto skrypt, który wykorzystuje opcję - timera zenity i dbus, aby osiągnąć to samo zachowanie bez potrzeby dostępu do sudo:
Podstawową ideą jest to, że opcja limitu czasu zenity kończy działanie z kodem większym niż 0, co zwykle oznacza, że polecenie nie powiodło się. Tak więc traktując opcję anulowania i limit czasu zenity jako warunek umożliwiający zamknięcie, używamy operatora OR (
||
), aby zamknąć tylko wtedy, gdy użytkownik kliknie przycisk anulowania (oznaczony jako „DOIT”) lub upłynie limit czasu okna dialogowego.Można wprowadzić inną odmianę, aby poprawić wrażenia użytkownika
yad
(najpierw należy zainstalować za pomocą tych poleceńsudo apt-add-repository ppa:webupd8team/y-ppa-manager;sudo apt-get update; sudo apg-get install yad
). Ta odmiana wykorzystuje pasek postępu, aby poinformować użytkownika, ile czasu pozostałoInna możliwa wersja bierze pod uwagę, że jeśli zmienisz etykietę przycisku OK zenity, domyślnie podświetlony przycisk może być przyciskiem OK.
Skrypt zamyka system przy każdym zwrocie, który nie jest równy 0. Jeśli skrypt przekroczy limit czasu, wartość 1 lub 5 zwraca skryptowi wykonanie
else
częściźródło
zenity --timeout
wbudowanego timera. Dzięki temu nie będziemy musieli anulować / ponownie uruchomić zamknięcia później.if [[ $? -eq 1 ]] ; then exit \else dbus...
warunkiem, który to robi. Oczywiście wydaje się, że nie ma sposobu, aby zadzwonić do starego pomocnika wylogowania ...Nie dosłownie o co prosiłeś, ale przynajmniej (efektywnie) porównywalnym rozwiązaniem byłoby umieszczenie skryptu poniżej pod klawiszem skrótu.
Co to robi
Gdy używany jest klawisz skrótu:
gnome-session-quit --power-off
polecenie jest uruchamianemysz jest przesuwana do przycisku odpowiadającego „blisko”, skutecznie czyniąc wstępnie wybrany przycisk zamykania:
Następnie:
Scenariusz
Jak używać
Jestem pewien, że wiesz, jak go używać, ale oto powód dla którego nawykliśmy:
Używa skryptu
xdotool
Skopiuj skrypt do pustego pliku i zapisz go jako
run_close.py
W sekcji głowy ustaw lokalizację przycisku zamykania na ekranie w zamkniętym oknie (moje pierwsze przypuszczenie było słuszne):
i czas oczekiwania na zamknięcie bez nadzoru:
Uruchom go testowo za pomocą polecenia:
Przetestuj to z wszystkimi opcjami: naciskanie w Entercelu natychmiastowego wyłączenia, nienadzorowanego wyłączenia i przerwanie procedury za pomocą myszy
Jeśli wszystko działa poprawnie, dodaj go do klawisza skrótu: wybierz: Ustawienia systemu> „Klawiatura”> „Skróty”> „Skróty niestandardowe”. Kliknij „+” i dodaj polecenie:
EDYTOWAĆ
Poniżej wersja skryptu, która nie wymaga żadnych dodatkowych ustawień. Oblicza współrzędne przycisku wyjścia, bez względu na rozdzielczość ekranu.
Konfiguracja jest prawie taka sama, ale
[3.]
można ją pominąć.Wyjaśnienie
Rozmiar okna Menedżera sesji do zamknięcia systemu jest zawsze wyśrodkowany i ma stały (absolutny) rozmiar, niezależny od rozdzielczości ekranu. Dlatego położenie względem środka ekranu jest stałym czynnikiem.
Wszystko, co musimy wtedy zrobić, to odczytać rozdzielczość ekranu i stamtąd obliczyć pozycję przycisku.
Zastosowana funkcja (
get_qloc()
) oblicza rozdzielczość lewego ekranu , ponieważ to właśnie tam pojawi się dialog.Uwaga
Czas ustawiony w wierszu
time.sleep(0.4)
jest ustawiony dla względnie wolnych systemów, aby upewnić się, że mysz zostanie poruszona po wyświetleniu okna zamykania. W szybszych systemach może być krótszy, w wolniejszych systemach (np. VM) może być konieczne ustawienie dłuższej.źródło