如果我退出该程序,如何自动重新启动 nautilus?

如果我退出该程序,如何自动重新启动 nautilus?

由于奇怪的窗口焦点和/或键绑定在我的系统上,有时我本想关闭最上面的应用程序窗口(例如 LibreOffice 文档),但无意中关闭了 Nautilus/Files 窗口。最后我不得不手动重新启动 Nautilus/Files。我必须这样做方式比我希望的还要频繁。

我可以看到用例:我希望 Nautilus/Files 在日常使用中退出后不会立即重新启动。

我如何自动检查 Nautilus/Files 是否正在运行,如果没有运行,则重新启动它?

解决方案中资源使用效率的提高可获得加分。

基于我不希望出现这种行为的答案将被否决。

答案1

更新:2019年10月16日。

感谢 gnome 专家对下面链接问题的回答,我们实现了一种更快、更稳定的重新启动 Nautilus 文件管理器的方法。


这竟然是一个具有挑战性的问题因为 Nautilus 一直在运行以控制桌面。如果您终止该程序,则nautilus所有桌面图标都会消失。当 nautilus 正在运行且您的桌面图标存在时,如果您nautilus在终端中键入内容,则 Nautilus 文件管理器就会出现。

~/ttlus将此脚本复制到名为:的文件中

#!/bin/bash

# NAME: ttlus (Twenty Thousand Loops Under Startup)
# PATH: $HOME/askubuntu/
# DESC: Answer for: https://askubuntu.com/questions/1180043/how-can-i-automatically-relaunch-nautilus-if-i-quit-the-program
#       Call Nautilus, named after Twenty Thousand Leagues Under the Sea novel,
#       20,000 times in loop from Startup Applications
# DATE: October 10, 2019.  Modified October 16, 2019.

# NOTE: Things that don't work:
#       https://askubuntu.com/questions/965052/how-to-make-script-wait-for-nautilus-to-exit
#       https://ubuntuforums.org/showthread.php?t=1604843

# UPDT: Rpelace loop with occassional focus grabbing and unpredictable delays:
#    while ps -L -p "$PID" -o pid,nice,lwp,comm | grep pool > /dev/null ; do
#       with:
#    while gdbus introspect --session --dest org.gnome.Nautilus \ ... 3 lines

LoopLimit=20000
Program="nautilus"
#Program="/usr/bin/nautilus --gapplication-service"
PID=$(pgrep nautilus)
Sec=3

if [[ $PID == "" ]] ; then
    notify-send "ERROR in $0: Cannot find nautilus PID"
    exit
fi

for (( l=0; l<LoopLimit; l++ )) ; do
    # Is nautilus file manager running? 1 Window only is desktop icons
    while gdbus introspect --session --dest org.gnome.Nautilus \
        --object-path /org/gnome/Nautilus --recurse | \
        grep -q '^ *node /org/gnome/Nautilus/window/' | \
        grep -v '/window/1' ; do
            sleep "$Sec"
    done
    "$Program" "$HOME" 2> /dev/null
    sleep $(( Sec / 2 ))
done

notify-send "ERROR in $0: $Program exceeded $LoopLimit loop limit"

使其可执行chmod a+x ~/ttlus

第一个测试是在终端中输入~/ttlus &。满意后,将其添加到启动应用程序

如果程序运行失控使用:

$ pgrep ttlus
7970

$ kill 7970
[1]+  Terminated              ttlus

笔记:

  • 由于在使用+sleep "$Sec"退出 Nautilus或单击窗口后,Nautilus 重新出现在桌面上之前会有三秒钟的延迟(以减少资源使用)。AltF4X

相关内容