Как чисто запустить приложение для GUI через Терминал?

Некоторые приложения для GUI запускаются чисто через Терминальную командную строку, но некоторые не делают, и они заставляют Терминал ожидать приложения для завершения. Даже затем некоторые не "выпускают" командную строку.

Таинственный амперсанд & суффикс, кажется, заставляет терминал помещать процесс в фон (но я не уверен, что происходит там).

Существует ли способ запустить приложение через Терминал так, чтобы было не, "зависают на" эффекте, точно так же, как запуск чего-то через Alt+F2?

Я хотел бы иметь командную строку в наличии снова сразу без чего-то все еще в фоновом режиме и печатающий в терминале.

85
задан 5 October 2018 в 05:54

11 ответов

В случае gedit'а я просто постоянно держу копию открытой. Пока у вас запущена существующая копия, запуск gedit вызова из терминала, а затем закрытие терминала не убьет gedit.

Для других вещей, то, что сказали другие люди, тоже сработает. Я поклонник nohup ... Но если вам нужен терминал, который вы можете отсоединить, а затем снова прикрепить к нему, вы хотите посмотреть на экран .

  1. Запустите его в терминале, а затем запустите что-нибудь, что продолжает нажимать на выход. Я использую сервер разработки Django, но irssi или даже watch uptime были бы хорошими примерами.
  2. Убейте терминал и запустите новый.
  3. Запустите screen -r и BOOM, и вы снова в деле.

screen намного больше, и вы можете комбинировать его с byobu для лучшего восприятия терминала. Читайте вокруг.

17
ответ дан 5 October 2018 в 05:54

Загадочный амперсанд "&" суффикс, кажется, заставляет терминал поставить процесс в фоновое состояние.... (но я не уверен, что там происходит).

Это так и часто бывает. Если вы забыли использовать &, вы можете приостановить программу с помощью ctrl-z, затем поместить ее в фоновом режиме командой bg - и продолжать использовать эту оболочку.

stdin, stdout и stderr процесса все еще подключены к терминалу; вы можете перенаправить их из/в /dev/null или любой другой файл (например, сохранить где-нибудь выходной лог) по желанию:

some-program </dev/null &>/dev/null &
# &>file is bash for 1>file 2>&1

Вы можете видеть процесс в заданиях, вернуть его на передний план (команда fg) и посылать ему сигналы (команда kill).

Некоторые графические программы отделяются от терминала; если это так, то при выполнении команды "нормально" вы заметите, что запускается графическая программа и "выходит".


Вот короткий скрипт, его можно поместить в ~/bin, который я назвал runbg:

#!/bin/bash
[ $# -eq 0 ] && {  # $# is number of args
  echo "$(basename $0): missing command" >&2
  exit 1
}
prog="$(which "$1")"  # see below
[ -z "$prog" ] && {
  echo "$(basename $0): unknown command: $1" >&2
  exit 1
}
shift  # remove $1, now $prog, from args
tty -s && exec </dev/null      # if stdin is a terminal, redirect from null
tty -s <&1 && exec >/dev/null  # if stdout is a terminal, redirect to null
tty -s <&2 && exec 2>&1        # stderr to stdout (which might not be null)
"$prog" "$@" &  # $@ is all args

Я просматриваю программу ($prog) перед переадресацией, чтобы можно было сообщить об ошибках в ее расположении. Запустите ее как "runbg your-command args..."; вы все еще можете перенаправить stdout/err в файл, если вам нужно где-нибудь сохранить вывод.

За исключением перенаправления и обработки ошибок, это эквивалентно ответу htorque.

25
ответ дан 5 October 2018 в 05:54

Чтобы запустить приложение и отсоединить его от запущенного терминала, используйте &!...

firefox &!
25
ответ дан 5 October 2018 в 05:54

Это сработало для меня:

$ (nohup gedit 2>/dev/null &)
1
ответ дан 5 October 2018 в 05:54

Как многие полагали, нужно учитывать nohup.Но кадры nohup остаются открытыми на терминале и отображают активность программы на терминале, что раздражает. После этого можно просто закрыть терминал, чтобы этого не произошло. Я нашел очень простой обходной путь, который использую.

nohup gedit & exit

И все. Он открывает gedit и закрывает терминал при запуске gedit. Поскольку gedit сейчас не связан с терминалом, он остается активным.

0
ответ дан 5 October 2018 в 05:54

Open the terminal, type screen, type the command you want to run, close the terminal. Программа должна продолжать работать в сеансе GNU Screen.

4
ответ дан 5 October 2018 в 05:54

Использовать nohup

nohup - это программа, которая запускает данную команду с сигналами зависания. игнорируется, так что команда может продолжить выполнение в фоновом режиме. после окончания родительского процесса. Смотрите страницу manpage

Например:

nohup gedit something
20
ответ дан 5 October 2018 в 05:54

Предположим, что gedit - это программа, которую вы хотите запустить отсоединенной (так же известной как "disowned", "disentangled", "separated separated separated"). Есть разные способы в зависимости от того, что именно вы хотите сделать:

Программа, которая уже запущена

Disown:

disown -h - это способ сделать это с уже запущенной программой (т.е. если вы забыли nohup ее). Сначала вы должны остановить ее, используя Ctrl+Z. Затем можно вставить в фоновом режиме с помощью bg [jobId] (например, bg 1). Вы получаете список запущенных заданий с их jobId, используя jobs. После этого Вы можете отключить его от терминала, используя disown -h %[jobId]. Пример сеанса работы с терминалом:

$ gedit 
^Z
[1]+  Stopped                 gedit
$ jobs
[1]+  Stopped                 gedit
$ bg 1
[1]+ gedit &
$ disown -h %1
$ exit

Программа еще не запущена

nohup

nohup не всегда присутствует на всех машинах. Если вы заранее знаете, что хотите развязать программу, то используйте:

nohup gedit &

Может быть, вы также захотите перенаправить вывод оболочки, а ваша программа - источник псевдослучайного ввода, так что: nohup ./myprogram > foo.out 2> bar.err < /dev/null &. Вы захотите перенаправить вывод, чтобы он либо не раздражал вас, либо использовался позже. Вывод null-input может помочь предотвратить зависание в ssh.

Subshell:

Аналогичного эффекта можно добиться с помощью

$ (geany >/dev/null 2>&1 &)

Скобки открывают новую подоболочку для запуска gedit'а. >/dev/null 2>&1 перенаправляет вывод оболочки в никуда (подавляя вывод). А и в конце помещают процесс в фоновое состояние.

Мультиплексирование терминала

Также мультиплексирование терминала с помощью screen или byobu. В основном программа выполняется в собственном терминале. Я действительно могу порекомендовать байобу и по другим причинам. Ниже приведен список ярлыков boybu, которые могут пригодиться Вам для первых шагов:

Полезно:

  • F2 Создайте новое окно
  • F3 Перейдите к следующему окну
  • F4 Перейдите к предыдущему окну
  • F6 Отсоединитесь от сессии и выйдите
  • Shift-F6 Отсоединитесь от сессии, но не выходите из системы
  • F7 Войдите в режим прокрутки/поиска
  • Ctrl-F5 Вновь подключите любые SSH/GPG-разъемы или агенты

Менее удобно:

  • Shift-F2 Разделение экрана по горизонтали
  • Ctrl-F2 Разделение экрана по вертикали
  • Shift-F3 Перемещение фокуса на следующий раздел
  • Shift-F4 Перемещение фокуса на предыдущий раздел
  • Shift- F5 Свернуть все разделения
  • F5 Обновить все уведомления о состоянии
  • F8 Переименовать текущее окно
  • F9 Запустить меню конфигурации Byobu
  • F12 GNU Screen's Escape Key
  • Alt- Pageup Прокрутите историю этого окна назад
  • Alt-Pageown Прокрутите историю этого окна вперед
  • Ctrl-a-! Включите или выключите все связки клавиш Byobu

Демон 'at' и другие

at - это хороший полезный маленький инструмент для выполнения команды в запланированное время. Он может быть 'неправильно использован' для отсоединения команды от оболочки:

echo './myprogram myoption1 myoption2' | at now

Также вы можете посмотреть на setid и start-stop-daemon, но других методов должно быть достаточно.

86
ответ дан 5 October 2018 в 05:54

Это работает даже внутри сценария (как и псевдонимы, '& 'трейлер обычно не допускается в скриптах, потому что они не интерактивны):

bash -i >/dev/null 2>&1 <<<'nohup gedit &'
0
ответ дан 5 October 2018 в 05:54

Это сработало для меня:

$ (some-program &) &>/dev/null

# Examples:
$ (gedit &) &>/dev/null
$ (google-chrome &) &>/dev/null
0
ответ дан 5 October 2018 в 05:54

xdg-open

Nézze meg ezt az általános célú segédprogramot: https://linux.die.net/man/1/xdg-open

Ez viszonylagos helyet nyit meg a fájlkezelőben.

 $ xdg-open .

Ez megnyit egy pdf fájlt egy pdf olvasóban.

 $ xdg-open foo.pdf

Akár webes URL-eket is megadhat

$ xdg-open www.google.com
2
ответ дан 5 October 2018 в 05:54

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

Похожие вопросы: