Как запустить скрипт в свернутом терминале Gnome?
Я могу запустить команду в новом терминале Gnome следующим образом:
nohup gnome-terminal --window-with-profile=Background --command ls >/dev/null 2>&1&
(На основе https://Ask-ubuntu.ru/a/46630/7146 и https://stackoverflow.com/a/10708326/236081)
Тем не менее, я хочу, чтобы новое окно терминала было запущено в Launcher. Как я могу это сделать?
4 ответа
Я основал свое решение на некоторых ответах, данных для минимизации и максимизации окон. В этом случае, однако, я хотел нацелиться только на этот терминал Gnome (но не на другие терминалы Gnome), поэтому я дал ему имя, используя --title
:
nohup gnome-terminal --title="Tiny Terminal" --window-with-profile=Background --command "$argv" >/dev/null 2>&1&
И создал правило пирога дьявола для окон под названием "Крошечный терминал":
(if
(is (window_name) "Tiny Terminal")
(begin (minimize) )
)
(Если вы предпочитаете, вы можете использовать gdevilspie для создания этого правила в графическом интерфейсе.)
Это достигает первоначального желаемого эффекта. Однако, когда я попробовал это, я понял, что я также хотел, чтобы терминал восстановил до максимизированного состояния, о котором говорится в отдельном ответе.
Как насчет сворачивания окна после его создания?
$ (mate-terminal --window-with-profile=Background --title=xxx --command top >/dev/null 2>&1 &); sleep 0.1; xdotool windowminimize $(xdotool search --name xxx|head -1)
Я использую Mate вместо Gnome, но он должен работать точно так же, если вы замените mate-terminal
с gnome-terminal
:
$ (gnome-terminal --window-with-profile=Background --title=xxx --command top >/dev/null 2>&1&); sleep 0.1; xdotool windowminimize $(xdotool search --name xxx|head -1)
Во-первых, я создаю новое окно с mate-terminal
и я назначаю имя с помощью --title=xxx
вариант. После этого я использую xdotool search --name xxx|head -1
чтобы найти идентификатор этого окна, и я передаю его xdotool windowminimize
, sleep 0.1
задержка необходима, потому что для создания окна нужно немного времени.
Вместо использования заголовка окна вы также можете использовать другие параметры поиска:
$ xdotool search Usage: xdotool search [options] regexp_pattern
--class check regexp_pattern agains the window class
--classname check regexp_pattern agains the window classname
--maxdepth N set search depth to N. Default is infinite.
-1 also means infinite.
--onlyvisible matches only windows currently visible
--pid PID only show windows belonging to specific process
Not supported by all X11 applications
--screen N only search a specific screen. Default is all screens
--desktop N only search a specific desktop number
--limit N break search after N results
--name check regexp_pattern agains the window name
--title DEPRECATED. Same as --name.
--all Require all conditions match a window. Default is --any
--any Windows matching any condition will be reported
--sync Wait until a search result is found.
-h, --help show this help output
If none of --name, --classname, or --class are specified, the defaults are: --name --classname --class
Пример использования --class 'mate-terminal'
опция:
(mate-terminal --command 'top' &) && sleep 0.1 && xdotool windowminimize $(xdotool search --class 'mate-terminal' |sort|tail -1)
Это должно работать для гнома:
(gnome-terminal --command 'top' &) && sleep 0.1 && xdotool windowminimize $(xdotool search --class 'gnome-terminal' |sort|tail -1)
Я сортирую вывод xdotool search
поскольку вновь созданное окно должно быть последним в списке.
Gnome-Terminal не имеет возможности начать свернутый.
Следующее - больше обходной путь, чтобы сделать это:
Первый wmctrl
нужна, но не версия из репозиториев, потому что в этой версии нет опции минимизации окон. (Если вы уже установили wmctrl
Вы должны удалить это).
Загрузите версию с github https://github.com/geekless/wmctrl/archive/master.zip и установите ее (следуйте файлу INSTALL -> ./configure
затем sudo make install
). Если вы получаете error: X11/Xmu/WinUtil.h
Вы также должны установить sudo apt-get install libxmu-dev
и попробуйте еще раз.
Затем вы можете запустить из командной строки это, например:
gnome-terminal -x sh -c "ls; bash" & disown && sleep 3 && wmctrl -i -Y $(wmctrl -l | awk -F' ' 'END{print $1}')
Объяснение:
gnome-terminal -x sh -c "ls; bash" & disown
запустить gnome-терминал в фоновом режиме и выполнить команду (в этом случаеls
)sleep 3
дождитесь появления окна gnome-терминала (вы можете поэкспериментировать с этим значением, 3 секунды могут быть короткими или длинными, зависит от вашего оборудования)wmctrl -i -Y
-i -> интерпретировать аргументы окна как числовое значение, -Y -> обозначить (свернуть) окно$(wmctrl -l | awk -F' ' 'END{print $1}')
или же$(wmctrl -l | tail -1 | cut -d' ' -f1)
получить идентификатор окна последнего открытого окна (в этом случае должен быть идентификатор окна gnome-терминала)
Чтобы упростить его, вы можете добавить функцию к вашему $HOME/.bashrc
файл:
gterm-min() {
gnome-terminal -x sh -c "$1; bash" & disown
sleep 3
wmctrl -i -Y $(wmctrl -l | awk -F' ' 'END{print $1}')
}
тогда вы можете использовать это так:
gterm-min "ls -la"
Вот как я запускаю сервер "The Language Tool" без цикла без цикла:
#!/bin/bash
LT_WIN_NAME='The Language Tool'
xterm -geometry 126x12+0+0 -T "${LT_WIN_NAME}" -e\
java -cp languagetool-server.jar org.languagetool.server.HTTPServer --allow-origin "*" &
xdotool windowminimize $(xdotool search --sync --name "${LT_WIN_NAME}")