A abordagem adequada seria fazer o seguinte:
$ pkexec shutdown -P +60 2>&1 | xargs -L1 -I % zenity --width=250 --height=250 --info --text=%
Com o seguinte resultado:
Existem várias coisas importantes acontecendo:
-
já que você estará usando o pop-up da GUI, use
pkexec
para ter o pop-up da GUI para senha em vez desudo
.
O comando -
shutdown
é enviado para o fluxo stderr (descritor de arquivo # 2). Mas os canais só recebem fluxo de stdout. Assim, precisamos redirecionar o conteúdo do stderr via pipe também. Isso é o que o2>&1
faz. (Nota: os que pretendem usar isso combash
shell só podem usar|&
, porém2>&1
funciona com a maioria dos shells parecidos com Bourn) -
xargs
nos permite obter argumentos de linha de comando do fluxo de stdin e executar um comando (neste casozenity --info
) com esses argumentos.-L1
nos permite considerar uma única linha como argumento. Assim, a saída deshutdown
será armazenada na variável%
e substituída emzenity --width=250 --height=250 --info --text=%
A razão pela qual eu não estou usando zenity --notification
é também porque tem dois botões - cancelar e OK, mas para o comando shutdown
você precisa especificamente fazer shutdown -c
para cancelá-lo, fazendo com que o botão cancelar o diálogo de notificação absolutamente inútil.