Befehl ausführen, nachdem das Fenster des Dateimanagers (Thunar) geschlossen wurde

Befehl ausführen, nachdem das Fenster des Dateimanagers (Thunar) geschlossen wurde

Ich schreibe ein einfaches Skript, in dem ich ein Verzeichnis dirnamemit Thunar öffnen und dieses Verzeichnis nach dem Schließen des Thunar-Fensters löschen muss. Ich habe etwas erwartet wie

thunar $dirname && rm -r $dirname

arbeiten.

Das Problem ist, dass der thunarProzess nach dem Start nicht mit dem Terminal verbunden zu bleiben scheint: Nach dem Ausführen thunar $dirnamegeht die Shell direkt zum nächsten Befehl, anstatt zu warten, bis das thunarFenster geschlossen wird. Wie kann ich das umgehen?

Antwort1

Es läuft bereits ein Thunar-Prozess mit der Option „--daemon“, sodass jeder neue Thunar-Aufruf diesen verwendet und Ihr Versuch, einen neuen Thunar-Prozess zu starten, fehlschlägt und rm sofort ausgeführt wird. Beachten Sie, dass „Thunar --daemon“ selbstnichtöffne ein Thunar-Fenster.

Der Daemon-Prozess wird normalerweise per Definition in /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml ("/etc", nicht "~") beim Login gestartet. Das Entfernen des Flags "--daemon" dort wirkt sich auf vorhandene Skripte aus, die nicht darauf warten, dass Thunar geschlossen wird, und blockiert Ihre Befehlszeile, wenn Sie Thunar von dort aus starten.

Sie können den Thunar-Daemon vor Ihrer entsprechenden Skriptzeile mit „beenden“ Thunar -q, die Zeile ausführen und den Daemon Thunar --daemon &danach mit neu starten (achten Sie auf das &am Ende, um den Daemon im Hintergrund zu starten, da Ihr Skript andernfalls auf die Beendigung wartet).Vorbehalt:Alle Thunar-Fenster, die „auf“ dem von Ihnen „gekillten“ Thunar-Daemon geöffnet waren, verschwinden ohne Vorankündigung.

Ihre vollständige Zeile könnte also lauten:

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

Schauen Sie sich doch mal anThunars Manpage

Antwort2

Wenn bereits ein Thunar-Prozess ausgeführt wird (Desktop-Manager oder ein anderes Fenster), wird ein neues Thunar-Fenster vom aufrufenden Prozess abgetrennt und der nächste Befehl gestartet, und es gibt kein pidfür ein bestimmtes Fenster. Dies wird in der Antwort von hh skladby gut beschrieben.

Ich möchte das Problem lösen, ohne den bereits gestarteten Thunar-Prozess zu beenden.

Es scheint schwierig, [allein] zu verwenden pid, aber es gibt eine (Fenster-ID), die (in Kombination mit einer intelligenten Logik) widgefunden werden kann . Lassen Sie das Shellskript danach suchen (mehrfach in einer Schleife) und wenn das weg ist, können Sie das Verzeichnis entfernen.wmctrl -lpwid

Das folgende Shellskript zeigt, wie es geht. Es ist nur ein Demoskript, da es keine andere Aktion als die Lösung des in der Frage angegebenen Problems beinhaltet.

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

verwandte Informationen