我想在启动时执行 bash 脚本,在不同的工作区中打开多个终端。如果我从终端调用脚本,它就可以正常工作,但如果使用@reboot 从 crontab 执行它就不起作用:
#!/usr/bin/env bash
#1 make sure we have enough workspaces
gconftool-2 --set -t int /apps/metacity/general/num_workspaces 7
#2. Launch programs in these terminals
wmctrl -s 6
gnome-terminal --full-screen --execute bash -c "tmux attach; bash"
wmctrl -s 5
gnome-terminal --full-screen --execute bash -c "weechat-curses; bash"
wmctrl -s 4
gnome-terminal --full-screen --execute bash -c "export TERM=xterm-256color; mutt; bash"
wmctrl -s 3
gnome-terminal --full-screen
wmctrl -s 2
gnome-terminal --full-screen
wmctrl -s 1
gnome-terminal --full-screen
wmctrl -s 0
google-chrome --start-maximized
我认为这是因为 crontab 作业在加载桌面环境之前触发......也许......?加载桌面环境后如何执行此脚本?谢谢:)
更新1:
我最初是从 crontab 开始的,如下所示:
@reboot $HOME/andreiscripts/startup.sh >> $HOME/andreiscripts/testlog.txt 2>&1
并收到这些错误:
Cannot open display.
Failed to parse arguments: Cannot open display:
Cannot open display.
Failed to parse arguments: Cannot open display:
Cannot open display.
.....
更新 2
我尝试从 System > Preferences > Startup Applications 启动脚本
/home/andrei/andreiscripts/startup.sh >> /home/andrei/Desktop/out.txt 2>&1
但是脚本只在工作区 6 中打开了第一个 gnome-terminal ...并且在我关闭该 gnome-terminal 之前不会继续执行脚本的其余部分等等....
更新 3 - 成功
在下面查找我的答案,以查看最终有效的脚本。
尝试系统 > 首选项 > 启动应用程序。您应该能够为您的 bash 脚本添加一个条目。这些应用程序作为登录后桌面加载过程的一部分启动。
尝试这个:
那应该行得通。我遇到了同样的问题并用 sh 运行我的脚本修复了它。
此外,您可能希望将其延迟 5 或 10 秒,以便加载其他所有内容。为此,请转到 ~/.config/autostart,找到您的新条目,使用文本编辑器打开它,然后添加以下行:
数字以秒为单位。使用“sleep”cmd 可以实现相同的目的,但这更清洁(它不会产生新进程)。
我也遇到了问题,试图在启动时运行 shell 脚本,运行多个命令,这些命令会产生像你这样的程序的多个实例。我能想出的唯一解决方案是在每个命令的末尾添加一个“&”。如果“sh -c”不起作用,请尝试。
还有其他的可能性,如果你还没有让它工作,也许我们可以尝试其他的:)
创建 6 个 .desktop 启动器来启动这些命令,然后保存会话。
这是有效的脚本:
我按照 ayan4m1 的建议从 System > Preferences > Startup Applications 启动它,如下所示: