O Compiz fornece essa funcionalidade usando o plug-in Window Rules. Você especifica quais janelas para combinar (por nome, tipo, ID, etc.) e, em seguida, você pode aplicar regras a essas janelas. Uma das regras é impedir que a janela seja fechada. Eu usei isso por um longo tempo e posso confirmar que ele funciona bem e impede atalhos de teclado, botão Fechar e botão direito e fechar na barra de tarefas. Praticamente uma maneira de impedir que uma janela feche.
Você também pode usar xprop
para fazer isso (o Compiz não é obrigatório). Um exemplo:
xprop -format _NET_WM_ALLOWED_ACTIONS 32a -set _NET_WM_ALLOWED_ACTIONS "_NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW"
Combinado com a localização do ID da janela a ser usado:
window_id='wmctrl -l | grep Insert_Name_of_Window | head -n1 | cut -d" " -f1'
xprop -id "$window_id" -format _NET_WM_ALLOWED_ACTIONS 32a -set _NET_WM_ALLOWED_ACTIONS "_NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW"
Observe que o que xprop
está modificando aqui são ações permitidas para a janela, não o estado da janela . Portanto, se você quiser impedir que uma janela seja minimizada, remova a ação _NET_WM_ACTION_MINIMIZE
e assim por diante. Se você realmente deseja alterar o estado de uma janela, usar wmctrl
é uma ferramenta mais fácil de usar para isso.
Embora a lista padrão de ações permitidas seja provavelmente a mesma para todos os gerenciadores de janelas, talvez você queira executar xprop | grep _NET_WM_ALLOWED_ACTIONS
na janela antes, para ter certeza de que está redefinindo todas as outras ações que estavam lá. antes. Não parece haver uma maneira de usar xprop
para remover uma única ação permitida, apenas para remover uma propriedade inteira.
Em termos de quão seguro / seguro é, provavelmente é o melhor que você pode obter para uma única janela. Ao remover _NET_WM_ACTION_CLOSE
ou outra ação permitida, isso significa que a janela não pode receber essa ação. Não importa qual método um usuário possa tentar fechar a janela, a janela nunca receberá essa ação. Obviamente, há mais componentes para criar uma área de trabalho segura, mas essa deve ser a melhor maneira de evitar que uma janela seja fechada.
No entanto, se o aplicativo oferecer uma maneira de fechar a si mesmo (por exemplo, File > Quit
), ele será fechado quando for acionado. Remover _NET_WM_ACTION_CLOSE
impede que a ação seja recebida de fora da janela, mas não impede que a janela acione a ação em si.