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
pkexecpara 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>&1faz. (Nota: os que pretendem usar isso combashshell só podem usar|&, porém2>&1funciona com a maioria dos shells parecidos com Bourn) -
xargsnos permite obter argumentos de linha de comando do fluxo de stdin e executar um comando (neste casozenity --info) com esses argumentos.-L1nos permite considerar uma única linha como argumento. Assim, a saída deshutdownserá 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.