Вообщем вот такое решение нашел на просторах интернета.
Подделал немного под себя.
Нужен установленный пакет wmctrl
sudo apt install wmctrl
Не универсальное (возможно), под XFCE так и не понял, что отвечает за службу выключения. Под остальными не смотрел.
Когда на XFCE запускаешь, выходит диалог завершения намертво и ничего за ним не сделать.
Вот если бы его в начале скрипта прибить, тогда возможно и там бы заработал.
У меня Openbox + Lxpanel + Waterline.
По коду поймете, как под себя подделать.
Закрывает окна и с других рабочих столов, если окно было свернуто, надо нажать отмена, через Alt-Tab выйти на него посмотреть, что там, ну и сохранять или нет.
Пока все окна не сохраните или не сделаете отмену сохранения, выключения не будет. будет ждать.
#!/bin/bash
echo "Завершение всех приложений"
echo "Завершаем фоновые и приложения из трея"
killall -TERM conky
killall -TERM blueman-applet
killall -TERM uget-gtk
killall -TERM transmission
killall -TERM lxpanel
killall -TERM waterline
sleep 1
echo "Пытаемся закрыть все окна, кроме своего"
LIST=`wmctrl -l | cut -d " " -f 1-1`
for i in $LIST; do
id=$(("$i"))
if [ $id != $WINDOWID ] ; then
wmctrl -ic "$i"
fi
done
sleep 1
echo "Оставшиеся окна вызываем на этот десктоп"
LIST=`wmctrl -l | cut -d " " -f 1-1`
for i in $LIST; do
id=$(("$i"))
if [ $id != $WINDOWID ] ; then
wmctrl -iR "$i"
fi
done
echo "Ждём, пока окна не кончатся"
c='1'
while [ -n "$c" ]
do
c=''
LIST=`wmctrl -l | cut -d " " -f 1-1`
for i in $LIST; do
id=$(("$i"))
if [ $id != $WINDOWID ] ; then
echo "ждём $i"
c='1'
sleep 1
fi
done
done
sleep 1
shutdown -h now #выключение
#reboot -p #перезагрузка