从 bash 脚本运行后台命令作为 i3wm 的自动启动

从 bash 脚本运行后台命令作为 i3wm 的自动启动

我正在配置我的 i3 窗口管理器(版本 4),有时我认为使用其本机自动启动execexec_all失败。 (*)

因此,我决定创建一个i3_autostart.sh脚本,将我需要的所有内容添加到一个有组织的位置。很像KDEGNOME有自己的文件夹来做到这一点。

该脚本是通过~/.config/i3/config以下行 (**) 调用的:

exec_always --no-startup-id /home/beco/.config/i3/i3_autostart.sh

然后输入自动启动脚本,该脚本基本上只是调用一个运行我想要自动启动的每个程序的函数。这是一个例子:

Autostart()
{
    # why, o my?
    sleep 1

    # set keyboard bindings
    xkbcomp -w 0 /home/beco/.config/xkbmap_kde $DISPLAY

    # toggle touchpad
    /home/beco/bin/touchpad off 

    # set wallpaper
    feh --bg-scale /home/beco/Pictures/wallpaper/Stonehenge-Desktop-Wallpaper-i3help.png

    # clipboard
    parcellite

    # network manager
    nm-tray

    # why, o my?
    sleep 1

}

所有程序启动都很好,除了nm-tray。我尝试了多种命令组合和技术,但均无济于事。

从我所看到的来看,问题是 nm-tray 喜欢运行前台,但需要运行后台,据我所知,它没有选项在命令行中设置它。所以我们需要使用bash设施。

这是我的尝试:

  1. 简单的背景
    # network manager
    nm-tray &
  1. 试图否认
    # network manager
    nm-tray &>/dev/null &
    disown $!
  1. nohup 和否认
    # network manager
    nohup nm-tray &>/dev/null &
    disown $!

我什至尝试让整个自动启动脚本在后台运行,只是为了确保 nm-tray 继续运行:exec_always --no-startup-id /home/beco/.config/i3/i3_autostart.sh &>/dev/null &

我看到剪贴板图标和键盘图标。触摸板设置为关闭。但 nm-tray 图标坚持不工作。

有什么建议么?谢谢。

@drbeco


(*) 我读过一些错误报告,但这个问题并不是要解决这个问题。这只是为了创建一个我可以信赖的良好解决方法,同时问题仍然存在。

(**) 这条线exec_always从来没有失败过,所以我很喜欢它。

答案1

唯一拒绝在后台运行(或随后不工作)的程序是需要终端的程序。
您的问题是nm-tray根本没有运行,因为您没有parcellite在后台启动。
因此,只需将&符号添加到这两行的末尾(如果您启动其他不会自行分离的长期运行/持久程序,则添加&符号,但我认为目前您上面的列表中没有)并在末尾添加一个否认脚本,不要让脚本挂在那里等待程序完成。


尝试使用此块代替上面的示例:

Autostart()
{
    # why, o my?
    sleep 1

    # set keyboard bindings
    xkbcomp -w 0 /home/beco/.config/xkbmap_kde $DISPLAY

    # toggle touchpad
    /home/beco/bin/touchpad off 

    # set wallpaper
    feh --bg-scale /home/beco/Pictures/wallpaper/Stonehenge-Desktop-Wallpaper-i3help.png

    # clipboard
    parcellite &

    # network manager
    nm-tray &

    # detach the started background programs
    disown
    # why, o my?
    #sleep 1

}

相关内容