Pełne wylogowania w dwm

5

Chcę, aby dwm zamknął wszystkie okna z wdziękiem po naciśnięciu klawisza skrótu. Lubię zachowanie Unity: wyświetla listę okien odmawiających wylogowania (na przykład edytorów z niezapisanymi zmianami) i nie wylogowuje się przed rozwiązaniem wszystkich problemów i zamknięciem aplikacji. Domyślnie dwm właśnie kończy sesję X i wszystkie działające aplikacje są zabijane.

Myślałem o napisaniu skryptu, który pobierze listę wszystkich okien, z wdziękiem je zamknie i zaczeka na zakończenie procesów. Ale nawet nie wiem, jak zamykać okna. Jedyny znany mi sposób to użycie wmctrl, a to narzędzie nie działa z dwm.

Riateche
źródło
ponieważ mam doświadczenie w pracy z kodem DWM, ale nie jest to przepełnienie stosu, więc muszę pozostać w kontekście: musisz mieć wrapper wokół dwm, to najlepsze, co możesz zrobić bez konieczności przepisywania kodu. Używam skryptu, który wysyła sigterm do wszystkiego oprócz dwm działającego pod nim, a jeśli (tylko jeśli) wszystko również zostało zabite, co nie ma miejsca, jeśli program wyświetli okno „zapisz dokument”, to również zabija dwm ( jeśli nie / no kill). Możesz zmodyfikować taki skrypt, aby zrobić to, co chcesz, owijając go jednak bez wchodzenia w kody prawdziwe wyzwanie. (ale tak jak powiedziałem, nie jest to
przepełnienie stosu
btw możesz użyć kombinacji ps, kill, grep i sed, aby uzyskać potrzebne informacje o swoich procesach w skrypcie, oczywiście możesz znaleźć poprawną instancję dwm za pomocą zmiennej DISPLAY
osirisgothra

Odpowiedzi:

0

Może być konieczne uruchomienie dwm z poziomu menedżera sesji X11


Oto jeden ze sposobów, aby to zrobić za pomocą Gnome Display Manager (GDM)

Dodaj następujące elementy do /usr/share/xsessions/dwm.desktop

 [Desktop Entry]
 Encoding=UTF-8
 Name=dwm
 Comment=This session starts dwm
 Exec=/usr/local/bin/dwm-start
 Type=Application

Utwórz nowy plik w / usr / local / bin / dwm-start z 755 uprawnieniami.

 #!/bin/sh
 # You can add other programs to set the background, add autoloading
 # and add autoload for USB and such here 
 # Make sure you start dwm last as it never returns control to this script
 exec /usr/local/bin/dwm > /dev/null

Jeśli GDM jest poprawnie skonfigurowany na twoim komputerze, powinieneś zobaczyć nowy wpis dwm w menu sesji na ekranie logowania.

Więcej drobnych poprawek dwm, w tym konfiguracja hibernacji / zamykania są tutaj.

Jeremy W.
źródło
Zaczynam dwm od lightdm (domyślny menedżer logowania w Ubuntu). Po zakończeniu dwm wszystkie aplikacje są zabijane. Nie widzę, aby gdm lub lightdm zapewniały jakąkolwiek funkcjonalność pozwalającą zapytać o to, czy naprawdę chcę zabić te aplikacje.
Riateche
@Riateche, jeśli uruchamiasz to już w lightdm ... czy próbowałeś gnome-session-quit --logout-dialog? Nie jestem pewien, czy będzie działał bez pulpitu gnome / unity, ale warto spróbować.
Jeremy W
gnome-session-quit działa tylko wtedy, gdy została uruchomiona sesja gnome. dwm nie działa dobrze z sesją gnome.
Riateche
1
@Riateche mod + Shift + Q powinien po prostu zabić dwm ... nie X. Czy to nie dotyczy ciebie?
Jeremy W
Istnieją dwie opcje. Po pierwsze: polecenie sesji jest ustawione bezpośrednio na dwm. W tym przypadku mod + shift + q zabija dwm, X i wszystkie aplikacje GUI. Po drugie: polecenie sesji jest ustawione na skrypt, który ponownie uruchamia dwm w nieskończonej pętli. W tym przypadku mod + shift + q restartuje dwm bez zabijania aplikacji i killall dwmzabija dwm, X i wszystkie aplikacje GUI. Obecnie używam drugiego typu konfiguracji.
Riateche