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"

Рекомендации:

Дальнейшее чтение:

Вот обходной путь, который использует 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'

Рекомендации:

Другие вопросы по тегам