Как сохранить раскладку `gnu screen` после перезагрузки

13

Я использую screensplit in 3 с vim слева, а два других экрана разделены горизонтально справа. Я знаю, что при отсоединении от экрана я могу сохранить макет с помощью :layout save my_layout_name.

У меня уже есть layout autosave onв моем .screenrcфайле, но это не помогает с моей проблемой.

Как сохранить структуру экрана между различными сеансами терминала и после перезагрузки компьютера? Или, может быть, в качестве обходного пути, есть ли способ запустить экран (параметры), которые разделяют его, настроить bash для каждого окна и сохранить макет?

randunel
источник

Ответы:

13

Макет по умолчанию для новых экранов

Управляйте своими регионами, затем выполните код внутри экрана :

  • Чтобы сохранить текущий макет в файл .screen_layout:

    rm -f $ HOME / .screen_layout
    экран -X макет дампа .screen_layout
    
  • Для автоматической загрузки с сохранением макета:

    эхо-источник .screen_layout >> $ HOME / .screenrc
    echo layout сохранить def >> $ HOME / .screenrc
    

Как это работает

  1. Вы печатаете screen.
  2. Экран читает $HOME/.screenrc:
  3. source .screen_layout- читать и выполнять команды из $HOME/.screen_layout
    регионов, которые сейчас созданы.
  4. layout save def- сохранить текущие регионы как макет, чтобы сохранить его при отсоединении.

layout dump .screen_layout

  • Сбросить ( добавить ) текущий макет в файл в $HOMEкаталоге

screen -X command

  • Запустить commandв текущем сеансе экрана (если выполняется внутри).
    Похоже на ctrlaто: command

Вы можете также

  • Отключить уведомление об авторских правах при запуске:

    echo startup_message off >> $ HOME / .screenrc
  • Увеличьте буфер прокрутки (по умолчанию 100)

    echo defscrollback 1000 >> $ HOME / .screenrc
  • Напишите собственное .screen_layout(50% / 50% по вертикали, с 2 оболочками):

    разделить -v
    screen -t s1
    
    фокус
    screen -t s2
    
    фокус
    
befzz
источник
Ты прав. Этот метод сохраняет макет экрана, выгружая команды в файл, а затем повторяя их .screenrc. .screen_layoutФайл может быть отредактирован со всеми командами , которые будут выполняться каждый раз при screenзапуске, в том числе и layout save defaultв конце концов. Я предлагаю другим читателям добавить screenпосле focusв .screen_layoutфайл, чтобы запустить bash.
рандунель
7

Ctrl- aто :тогда layout save default Предоставлено экран новая версия (с функцией раскладки) Удачи.

UPDATE: Вот это .screenrc файл , который будет сделать изменения постоянными , наряду с добавлением других функций приятно.

Мир Дунаев
источник
любая идея , почему layout autosave onв .screenrcне работает? Это было бы предпочтительнее для меня.
спинлок
Вы правы, это не работает. Но я протестировал .screenrc отсюда: gist.github.com/joaopizani/2718397 и он работает.
Мир Дунаев
2

" layout autosave on " работает только для явно именованных макетов в .screenrc.

А именно, если вы указали какой-то макет как ABC, переключились на него в сеансе Screen и отсоединились, этот последний макет будет восстановлен после возобновления сеанса.

Если вы не указали никакой компоновки в файле конфигурации, вы должны выполнить внутреннюю команду " layout save your_layout_name " перед отсоединением.

Это .screenrc с предопределенными макетами на выбор:

 0 — one (the only region)
 1 — two-v (the screen is splitted vertically into two regions, default layout)
 2 — two-h (the screen is splitted horizontally into two regions)
 3 — three (three regions — two in the upper part of the screen and one underneath)
 4 — four (four regions)

Предопределенные макеты

После выбора из экрана эти макеты сохраняются при отсоединении до следующего возобновления сеанса (из-за команды «Автосохранение макета включено»).

Если вы создали свой собственный макет, он должен быть сохранен с помощью команды « layout dump filename ». Затем вы можете использовать код из файла «filename», чтобы добавить свой макет в раздел #layouts этого .screenrc для выбора.

По умолчанию раскладка " two-v " загружается только с окном bash.

Олег Болден
источник
Это здорово, хотя я упустил, как переключаться с одного макета на другой, потом увидел комментарий, что привязка клавиш была удалена. Просто к вашему сведению - это связывание клавиш работает для меня (Ubuntu 16.04) для переключения раскладок: bind ' ' layout next # <- actually means Ctrl-a + Space
Bachi
0

Согласно этому источнику это невозможно из-за способа screenработы. Однако там есть взлом. По сути, это сводится к тому, что вложенный экран находится внутри другого экрана, что может быть не очень удобно. (Ответ найден здесь )

Если вы используете экран для разделения терминала на локальном компьютере (что я понял из упомянутой перезагрузки компьютера), вы можете проверить эмулятор терминала, который называется terminator. Он поддерживает горизонтальные и вертикальные разъемы терминала (также вложенные), и вы можете сохранить ваш любимый макет для дальнейшего использования. Тогда вы просто запустите терминатор с соответствующей опцией: terminator -l <name of saved layout>.

Erathiel
источник
Мне известно о вложении экрана в другой экран, но все экраны завершаются при перезапуске. Экран внутри экрана был разрешен при layoutдобавлении, поэтому ваш ответ, помимо вопроса, устарел. Я ценю terminatorпредложение, хотя.
randunel