Execute o comando após a janela do gerenciador de arquivos (Thunar) ser fechada

Execute o comando após a janela do gerenciador de arquivos (Thunar) ser fechada

Estou escrevendo um script simples onde preciso abrir um diretório dirnamecom o Thunar e excluir esse diretório após fechar a janela do Thunar. Eu estava esperando algo como

thunar $dirname && rm -r $dirname

trabalhar.

O problema é que o thunarprocesso parece não permanecer conectado ao terminal após a inicialização: após a execução thunar $dirname, o shell vai diretamente para o próximo comando, em vez de esperar que a thunarjanela seja fechada. Como posso contornar isso?

Responder1

Já existe um processo Thunar em execução com a opção "--daemon" para que qualquer nova invocação do Thunar use esta e sua tentativa de iniciar um novo processo Thunar falhe e rm seja executado imediatamente. Observe que o próprio "Thunar --daemon" faznãoabra uma janela do Thunar.

O processo daemon geralmente é iniciado no login por definição em /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml ("/etc", não "~"). A remoção do sinalizador "--daemon" afetará os scripts existentes que não esperam que o Thunar seja fechado e bloqueará sua linha de comando se você iniciar o Thunar a partir daí.

Você pode "matar" o daemon Thunar antes da linha de script relevante com Thunar -q, executar a linha e reiniciar o daemon Thunar --daemon &depois dela - esteja ciente de &no final para iniciar o daemon em segundo plano, caso contrário, seu script aguardará que ele termine ).Embargo:todas as janelas do Thunar que estavam abertas "no" daemon Thunar que você "matou" desaparecerão sem aviso prévio.

Então sua linha completa pode ser

Thunar -q && thunar $dirname && rm -r $dirname && Thunar --daemon &

Você pode dar uma olhadaPágina de manual do Thunar

Responder2

Quando já existe um processo Thunar em execução (gerenciador de desktop ou outra janela), uma nova janela Thunar será separada do processo de chamada e o próximo comando será iniciado, e não há pidpara uma janela específica. Isso está bem descrito na resposta de hh skladby.

Quero resolver o problema sem desligar o processo Thunar já iniciado.

Parece difícil usar pid[sozinho], mas existe um wid(ID da janela), que pode ser encontrado via wmctrl -lp(em combinação com alguma lógica inteligente). Deixe o shellscript verificar isso (repetidamente em um loop) e quando ele widacabar, você poderá remover o diretório.

O shellscript a seguir mostra como isso pode ser feito. É apenas um script de demonstração, pois não há outra ação senão resolver o problema especificado na pergunta.

#!/bin/bash

if [ "$1" == "" ]
then
 echo "No directory on command line"
 dirname="MyDir"
else
 dirname="$1"
fi
mkdir -p "$dirname"
if [ $? -ne 0 ]
then
 echo "Bad directory name, try again"
 exit 1
fi

thunar "$dirname"

pid=$(ps -e | grep -i thunar | sed -e 's/ *//' -e 's/ .*//')
#echo "$pid"
sleep 1
wid=$(wmctrl -lp | grep " $pid " | grep "${dirname##*/}" | tail -n1)
wid=$(echo "$wid" | tee /dev/stderr | sed 's/ .*//')
#echo "$wid"
echo "Waiting for you to close the Thunar window '${dirname##*/}' ..."
while wmctrl -lp | grep "$wid" > /dev/null
do
 sleep 1
done
rm -r "$dirname"
echo "Done :-)"

informação relacionada