Изящный выход в dwm

2749
Riateche

Я хочу, чтобы dwm изящно закрыл все окна, когда я нажимаю горячую клавишу quit. Мне нравится поведение Unity: оно отображает список окон, запрещающих выход из системы (например, редакторы с несохраненными изменениями), и не выходит из системы, пока все проблемы не будут решены и приложения не будут закрыты. По умолчанию dwm просто завершает сеанс X, и все запущенные приложения уничтожаются.

Я думал о написании сценария, который будет извлекать список всех окон, изящно закрывать их и ждать завершения их процессов. Но я даже не знаю, как закрыть окна. Единственный известный мне способ - использовать wmctrl, и эта утилита не работает с dwm.

5
так как у меня есть опыт работы с кодом DWM, но это не стекопоток, поэтому я должен оставаться в контексте: вам понадобится обертка вокруг dwm, это лучшее, что вы можете сделать, не переписывая код. Я использую сценарий, который отправляет sigterm всем, кроме dwm, работающего под ним, и если (только если) все также было убито, это не тот случай, когда программа выскакивает окно «сохранить ваш документ», а затем убивает и dwm ( если нет / не убивать). Вы можете модифицировать такой скрипт, чтобы он делал то, что вы хотите, но оборачивая его, не вдаваясь в коды, - настоящая проблема. (но, как я уже сказал, это не переполнение стека) osirisgothra 10 лет назад 0
Кстати, вы можете использовать комбинацию ps, kill, grep и sed, чтобы получить необходимую информацию о ваших процессах, когда в скрипте, конечно, вы можете найти правильный экземпляр dwm через переменную DISPLAY osirisgothra 10 лет назад 0

1 ответ на вопрос

0
Jeremy W

Вам может потребоваться запустить dwm из диспетчера сеансов X11


Вот один из способов сделать это с помощью 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-start с 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, включая настройку для режима гибернации / выключения, здесь.

Я запускаю dwm из lightdm (менеджер входа по умолчанию в Ubuntu). Когда dwm завершает работу, все приложения уничтожаются. Я не вижу, чтобы gdm или lightdm обеспечивали какую-либо функциональность для ** запроса ** о том, действительно ли я хочу, чтобы эти приложения были убиты. Riateche 11 лет назад 0
@Riateche, если вы уже запускаете это в lightdm ... вы пробовали gnome-session-quit --logout-dialog? Я не уверен, будет ли он действителен без рабочего стола gnome / unity, но стоит попробовать. Jeremy W 11 лет назад 0
gnome-session-quit работает только при запуске gnome-session. dwm не очень хорошо работает с gnome-session. Riateche 11 лет назад 0
@Riateche mod + Shift + Q должен просто убить dwm ... не X. Разве это не так? Jeremy W 11 лет назад 1
Есть два варианта. Во-первых: команда сеанса напрямую установлена ​​на dwm. В этом случае mod + shift + q убивает dwm, X и все приложения с графическим интерфейсом. Второе: для команды сеанса задан скрипт, который перезапускает dwm в бесконечном цикле. В этом случае mod + shift + q перезапускает dwm без уничтожения приложений, а `killall dwm` убивает dwm, X и все приложения с графическим интерфейсом. Я в настоящее время использую второй тип установки. Riateche 11 лет назад 0

Похожие вопросы