題 在dwm優雅註銷


當我按退出熱鍵時,我希望dwm優雅地關閉所有窗口。我喜歡Unity行為:它顯示拒絕註銷的窗口列表(例如,未保存更改的編輯器),並且在解決所有問題並關閉應用程序之前不要註銷。默認情況下,dwm只是結束X會話並且所有正在運行的應用程序都被終止。

我正在考慮編寫一個腳本來檢索所有窗口的列表,優雅地關閉它們並等待它們的進程完成。但我甚至不知道如何關閉窗戶。我知道的唯一方法是使用wmctrl,這個實用程序不適用於dwm。


5
2018-06-03 09:42


起源


因為我有使用DWM代碼的經驗,但這不是stackoverflow所以我必須保持在上下文中:你必須有一個dwm的包裝器,這是你可以做的最好而不必重寫代碼。我使用一個腳本將sigterm發送到除了在其下面運行的dwm以外的所有內容,並且如果(僅當)所有內容也被殺死,如果程序彈出“保存您的文檔”框,則不會出現這種情況,那麼也會殺死dwm(如果沒有/沒有殺死)。你可以修改這樣的腳本來做你想要的但是包裝它而不用去編碼真正的挑戰。 (但就像我說這不是stackoverflow) - osirisgothra
順便說一句,你可以使用ps,kill,grep和sed的組合,在腳本中獲取有關進程的信息,當然你可以通過DISPLAY變量找到正確的dwm實例 - osirisgothra


答案:


你可能需要 從X11會話管理器中啟動dwm


以下是Gnome Display Manager(GDM)的一種方法

添加以下內容 /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

在。創建一個新文件 在/ usr / local / bin目錄/ DWM啟動 擁有755權限。

 #!/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

如果在計算機上正確配置了GDM,則應在登錄屏幕的會話菜單中看到新的dwm條目。

這裡有更多的dwm調整,包括hibernate / shutdown的設置。


0
2018-06-09 15:52



我從lightdm開始dwm(Ubuntu中的默認登錄管理器)。當dwm完成後,所有應用程序都將被終止。我沒有看到gdm或lightdm提供任何功能 問 我真的希望這些應用程序被殺死。 - Riateche
@Riateche如果你已經在lightdm中開始這個了..你試過gnome-session-quit --logout-dialog嗎?我不確定它是否有效,沒有gnome / unity桌面,但值得嘗試。 - Jeremy W
gnome-session-quit僅在gnome-session啟動時才有效。 dwm與gnome-session的效果不佳。 - Riateche
@Riateche mod + Shift + Q應該只是殺死dwm ...而不是X.這不是你的情況嗎? - Jeremy W
有兩種選擇。第一:會話命令直接設置為dwm。在這種情況下,mod + shift + q會殺死dwm,X和所有gui應用程序。第二:session命令設置為在無限循環中重啟dwm的腳本。在這種情況下,mod + shift + q重啟dwm而不會殺死應用程序,並且 killall dwm 殺死dwm,X和所有gui應用程序。我目前正在使用第二種類型的設置。 - Riateche