Ejecute el comando después de cerrar la ventana del administrador de archivos (Thunar)

Ejecute el comando después de cerrar la ventana del administrador de archivos (Thunar)

Estoy escribiendo un script simple en el que necesito abrir un directorio dirnamecon Thunar y eliminar ese directorio después de cerrar la ventana de Thunar. Estaba esperando algo como

thunar $dirname && rm -r $dirname

trabajar.

El problema es que el thunarproceso no parece permanecer conectado a la terminal después de iniciarse: después de ejecutarlo thunar $dirname, el shell va directamente al siguiente comando, en lugar de esperar thunara que se cierre la ventana. ¿Cómo puedo solucionar esto?

Respuesta1

Ya hay un proceso Thunar ejecutándose con la opción "--daemon", por lo que cualquier nueva invocación de Thunar usará esta y su intento de iniciar un nuevo proceso Thunar falla y rm se ejecuta inmediatamente. Tenga en cuenta que el propio "Thunar --daemon" nonoabre una ventana de Thunar.

El proceso del demonio generalmente se inicia al iniciar sesión por definición en /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml ("/etc", no "~"). Eliminar el indicador "--daemon" afectará los scripts existentes que no esperan a que se cierre Thunar, y bloqueará su línea de comando si inicia Thunar desde allí.

Puede "matar" el demonio Thunar antes de la línea de secuencia de comandos relevante con Thunar -q, ejecutar la línea y reiniciar el demonio Thunar --daemon &después de ella; tenga en cuenta al &final para iniciar el demonio en segundo plano; de lo contrario, su secuencia de comandos espera a que finalice. ).Advertencia:Todas las ventanas de Thunar que estaban abiertas "en" el demonio Thunar que "mataste" desaparecerán sin previo aviso.

Entonces tu línea completa podría ser

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

Podrías echar un vistazo aPágina de manual de Thunar

Respuesta2

Cuando ya hay un proceso de Thunar ejecutándose (administrador de escritorio u otra ventana), se separará una nueva ventana de Thunar del proceso de llamada y se iniciará el siguiente comando, y no habrá ningún proceso pidpara una ventana en particular. Esto está bien descrito en la respuesta de hh skladby.

Quiero resolver el problema sin apagar el proceso Thunar ya iniciado.

Parece difícil usar pid[solo], pero hay un wid(ID de ventana) que se puede encontrar mediante wmctrl -lp(en combinación con alguna lógica inteligente). Deje que el shellscript lo busque (repetidamente en un bucle) y cuando widdesaparezca podrá eliminar el directorio.

El siguiente shellscript muestra cómo se puede hacer. Es sólo un script de demostración, porque no hay otra acción que resolver el problema especificado en la pregunta.

#!/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 :-)"

información relacionada