当电脑启动时在启动应用程序中使用 Xdotool 时,它不会最小化终端窗口吗?

当电脑启动时在启动应用程序中使用 Xdotool 时,它不会最小化终端窗口吗?

根据评论中的反馈尝试了这个命令:在终端窗口中这个命令有效:

gnome-terminal -x bash -c "sudo ./serial"; xdotool getactivewindow windowminimize 

但是,在启动程序中运行命令时,xdotool 似乎被忽略了。PC 启动时屏幕上显示终端窗口,而不是最小化。

背景历史:

我正在尝试找到一种方法来最小化终端窗口gnome 终端命令。我需要我的 Ubuntu 14.04LTS 远程电脑在启动时运行几个脚本和一个 C 程序。这台远程电脑供客户查看,因此显示器需要保持清洁。我没有看到可用于最小化的选项:http://manpages.ubuntu.com/manpages/wily/man1/gnome-terminal.1.html我能做的最好的事情就是把终端窗口缩小,如果我找不到更好的方法,这也是可以接受的。这是我在 Ubuntu 的“启动应用程序”程序中输入的命令:

gnome-terminal --geometry=60x2 --command "sudo ./My_C_Program"

我的编程/Linux 技能一般,但正在不断进步。我正在寻找更好的方法来做到这一点。

根据评论/反馈尝试了以下操作:

gnome-terminal -x bash -c  "sudo ./serial_ver2_machine3_free_air_3_95"; wmctrl -r :ACTIVE: -b add,shaded

在终端窗口中执行时,它的工作方式与我想要的一样!!终端窗口被遮住,但程序仍在运行,当我双击 Ubuntu 的终端图标时,它会重新出现。

但是,在“启动应用程序”中执行时,终端窗口不是“阴影”的。使用“add,hidden”不起作用。使用“add,below”有效,除非我将桌面背景图像用作客户查看的一部分。

答案1

另一个解决方案是在系统启动时创建会话并在其中执行一些命令。然后,无论在内部还是tmux外部,您都可以附加到此会话。还有更高级的用法,这里我将尝试涵盖最基本的级别。sshgnome-terminaltmux

1.安装tmuxsudo apt update && sudo apt install tmux

2.创建辅助可执行脚本文件。假设它位于用户$HOME目录中,名为run-my-tmux-session

touch "$HOME/run-my-tmux-session"
chmod +x "$HOME/run-my-tmux-session"

该脚本看起来应如下所示:

#!/bin/bash

SESS="my-tmux-session"                               # Set the session name

if (tmux has-session -t "$SESS" 2> /dev/null); then  # If session with name $SESS doesn't 
        echo "Session '$SESS' exists."               # exists
else                                                 # create it and send few commands
        tmux new-session -d -s $SESS
        tmux send-keys -t $SESS "echo 'Now:'; while true; do printf '%(%c)T\r'; done" ENTER
fi

exit 0

3.现在,如果你执行~/run-my-tmux-session该脚本,将创建tmux会话,调用my-tmux-session并执行其中的一些命令。以下是一些提示:

  • 列出所有会话:tmux ls

  • 要终止会话或终止所有会话:

    tmux kill-session -t <session-name>
    tmux kill-session #
    
  • 要附加到现有会话:

    tmux a -t <session-name>
    tmux attach -t <session-name>
    
  • 要离开(分离)会话,请在会话内运行以下命令:tmux detach

  • 要向会话发送命令而不附加:

    tmux send -t <sess-name> "<commands>" ENTER
    tmux send-keys -t <sess-name> "<commands>" ENTER  
    

4.A.tmux从以下位置启动会话启动应用程序。 打开启动应用程序并创建一个新条目。其命令应该是(替换<user>为实际用户名)

/home/<user>/run-my-tmux-session

4.B.重启后启动tmux会话crontab。编辑用户crontab文件,将以下几行添加到底部(输入crontab -e以访问用户的crontab

SHELL=/bin/bash
@reboot "$HOME/run-my-tmux-session"

4.C.tmux从启动会话/etc/rc.local这或许是最好的解决办法!编辑文件/etc/rc.local并添加以下其中一行在文件的最后一行之前,即exit 0 (替换<user>为实际用户名)

su -l <user> -c "/home/<user>/run-my-tmux-session"
sudo -iu <user> "/home/<user>/run-my-tmux-session"

参考:

进一步阅读:

答案2

以下是一种解决方法:创建一个辅助启动脚本,该脚本将在由打开的xdotool内执行gnome-terminal启动应用程序。该脚本将执行一些命令并最小化活动窗口。请仔细阅读下面脚本主体中的注释。

1.安装xdotoolsudo apt update && sudo apt install xdotool

2.创建辅助可执行脚本文件。假设它位于用户$HOME目录中,名为run-and-minimize

touch "$HOME/run-and-minimize"
chmod +x "$HOME/run-and-minimize"

该脚本看起来应如下所示:

#!/bin/bash

# Put your commands here, for example:
echo 'The current time is:'

sleep 2                                            # Adjust this value. The mouse should not be moved while this period otherwise some other window could become active!
xdotool windowminimize $(xdotool getactivewindow)  # Minimize the window

# Or put your commands here, for example:
while true; do printf '%(%c)T\r'; done &           # Some commands must be pushed into the background (`&`) to be successfully interrupted with keep open the terminal window.

exec bash                                          # Keep the window open after the above commands are finished or interrupted

3.打开启动应用程序并创建一个新条目。其命令应该是:

gnome-terminal -x sh -c 'exec $HOME/run-and-minimize'

我也成功测试了:

gnome-terminal -x bash -c 'exec $HOME/run-and-minimize'

参考:

相关内容