Skip to content
andyceo edited this page Aug 27, 2024 · 1 revision

screen

Простой мультиплексор терминала.

  • создать сессию (имя для сессии будет задано автоматически): screen

  • создать сессию с именем myjob (потом можно подключиться к ней, используя это имя): screen -S myjob

  • использовать шелл /bin/sh вместо того, что задан в переменной $SHELL внутри сессии: screen -s /bin/sh

  • выйти из сессии в терминал: Ctrl-a d, Ctrl-a Ctrl-d

  • вывести список всех сессий: screen -ls

  • подключиться к сессии по имени myjob: screen -r myjob

  • отсоединиться от сессии screen сразу после создания: screen -d

  • форсировать создание новой сессии screen, независимо от того, где вызвана команда screen, внутри сессии screen или нет: screen -m

  • создать новую сессию с именем, запустить в ней команду с аргументами и отсоединиться от сессии (т.е. вернуться в текущий терминал):

      screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"`
      screen -dmS example sudo iotop -a  # пример
    
  • предыдущая команда запустит команду не в шелле, т.е. если команда завершится, то завершится и screen, и все логи пропадут, и нельзя будет присоединиться к сессии и посмотреть вывод. Можно запустить предыдущую команду так:

      screen -dmS example bash -c 'ping -c 10 ya.ru'  # пример запуска команды ping в шелле
      screen -dmS example bash -c 'ping -c 10 ya.ru; exec bash'  # пример запуска команды ping в шелле, сохраняя логи
    
  • можно написать файл ~/.screenrc, в котором будут прописаны открытия сессий и некоторые настройки. Если нужно несколько таких файлов, то можно указать который использовать: screen -c myscreenrc. Примерное содержимое файла:

      # don't display the copyright page
      startup_message off
    
      # increase scrollback buffer size
      defscrollback 10000
    
      # create windows
      screen -t TODO vim TODO.txt
      chdir src
      screen -t coding vim main.c
      screen -t run
    

Скроллинг с помощью мыши не будет работать внутри screen. Два варианта исправить это:

  1. Использовать copy mode: Ctrl-a Esc, затем мышь/стрелки будут скроллить

  2. Создать файл настроек ~/.screenrc со следующим содержимым:

     cat ~/.screenrc
     # Enable mouse scrolling and scroll bar history scrolling
     termcapinfo xterm* ti@:te@
    

    Похоже что этот способ будет записывать буфер терминала на диск, что создаст проблемы в случае активного вывода.

Также можно использовать опцию -L, создающую в папке из которой был запущен screen, файл вида screenlog.#, где # это номер для этой сессии, начиная с 0.

Sidebar is under construction

Clone this wiki locally