![当电脑启动时在启动应用程序中使用 Xdotool 时,它不会最小化终端窗口吗?](https://linux22.com/image/1003200/%E5%BD%93%E7%94%B5%E8%84%91%E5%90%AF%E5%8A%A8%E6%97%B6%E5%9C%A8%E5%90%AF%E5%8A%A8%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E4%B8%AD%E4%BD%BF%E7%94%A8%20Xdotool%20%E6%97%B6%EF%BC%8C%E5%AE%83%E4%B8%8D%E4%BC%9A%E6%9C%80%E5%B0%8F%E5%8C%96%E7%BB%88%E7%AB%AF%E7%AA%97%E5%8F%A3%E5%90%97%EF%BC%9F.png)
根据评论中的反馈尝试了这个命令:在终端窗口中这个命令有效:
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
外部,您都可以附加到此会话。还有更高级的用法,这里我将尝试涵盖最基本的级别。ssh
gnome-terminal
tmux
1.安装tmux
:sudo 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.安装xdotool
:sudo 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'
参考: