Xdotool не минимизирует окно терминала при использовании в Startup Application при загрузке ПК?
На основании отзывов в комментариях пробовал эту команду: В окне терминала это работает:
gnome-terminal -x bash -c "sudo ./serial"; xdotool getactivewindow windowminimize
Однако при запуске команды в программе запуска xdotool, похоже, игнорируется. ПК загружается с терминальными окнами на экране, не свернутыми.
История вопроса:
Я пытаюсь определить способ свернуть окно терминала с помощью команды gnome-terminal. Мне нужен мой удаленный компьютер Ubuntu 14.04LTS для запуска нескольких скриптов и программы на Си при запуске. Этот удаленный компьютер предназначен для просмотра клиентом, поэтому монитор должен быть чистым. Я не видел опции, доступной для минимизации: http://manpages.ubuntu.com/manpages/wily/man1/gnome-terminal.1.html. Лучшее, что я мог сделать, это сделать окна терминала маленькими, что приемлемо, если я не найду лучшего способа. Это моя команда, введенная в программу Ubuntu "Startup Applications":
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.
Однако при выполнении в "Startup Applications" окно терминала не "затенено". Использование "добавить, скрытый" не работает. Использование "добавить ниже" работает, за исключением того, что я использую фоновое изображение своего рабочего стола как часть просмотра клиентом.
2 ответа
Другое решение заключается в создании 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
сессия из автозагрузки приложений. Откройте Startup Applications и создайте новую запись. Его команда должна быть (заменить <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"
Рекомендации:
Начать отдельный Tmux | Скрипт входа в Tmux | Создать сессию, если | Команда в отдельном Tmux
ArchWiki Tmux | Руководство по настройке вашего Tmux.conf | Нежное введение в Tmux
Конфигурационный файл TMUX | Еще один пример | Tmux Shortcuts & Cheatsheet, также здесь и здесь
Дальнейшее чтение:
Вот обходной путь, который использует 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. Откройте Startup Applications и создайте новую запись. Его команда должна быть:
gnome-terminal -x sh -c 'exec $HOME/run-and-minimize'
Я также успешно проверил:
gnome-terminal -x bash -c 'exec $HOME/run-and-minimize'
Рекомендации: