文件管理器 (Thunar) 窗口关闭后运行命令

文件管理器 (Thunar) 窗口关闭后运行命令

我正在编写一个简单的脚本,我需要dirname使用 Thunar 打开一个目录,并在关闭 Thunar 窗口后删除该目录。我期待类似的事情

thunar $dirname && rm -r $dirname

上班。

问题是该thunar进程在启动后似乎没有保持与终端的连接:运行后thunar $dirname,shell 直接转到下一个命令,而不是等待窗口thunar关闭。我该如何解决这个问题?

答案1

有一个 Thunar 进程已经使用“--daemon”选项运行,因此任何新的 Thunar 调用都将使用该进程,并且您尝试启动新的 Thunar 进程会失败,并且 rm 会立即运行。请注意,“Thunar --daemon”本身确实如此不是打开 Thunar 窗口。

守护进程通常根据 /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml(“/etc”,而不是“~”)中的定义在登录时启动。删除那里的“--daemon”标志将影响不希望等待 Thunar 关闭的现有脚本,并且如果您从那里启动 Thunar,它将阻止您的命令行。

您可以在相关脚本行之前使用 来“杀死”Thunar 守护程序Thunar -q,运行该行,并在其之后重新启动守护程序Thunar --daemon &- 请注意&最后的 来在后台启动守护程序,否则您的脚本将等待它结束)。警告:所有在您“杀死”的 Thunar 守护进程上打开的 Thunar 窗口都会消失,恕不另行通知。

所以你的完整线路可能是

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

你可以看看Thunar 的联机帮助页

答案2

当已经有一个 Thunar 进程正在运行(桌面管理器或另一个窗口)时,一个新的 Thunar 窗口将从调用进程中分离出来,并启动下一个命令,并且没有pid针对特定窗口的命令。 hh skladby 的回答对此进行了很好的描述。

我想在不关闭已经启动的 Thunar 进程的情况下解决问题。

[单独使用pid]似乎很难,但是有一个wid(窗口ID),可以通过wmctrl -lp(结合一些智能逻辑)找到。让 shellscript 检查它(在循环中重复),当它wid消失时,您可以删除该目录。

以下 shell 脚本展示了如何完成它。它只是一个演示脚本,因为除了解决问题中指定的问题之外没有其他操作。

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

相关内容