GNU Screen и Tmux: советы и подсказки

8

Так что я большой поклонник мультиплексоров, таких как GNU Screen и Tmux , но даже пользуясь Screen в течение многих лет, я все еще осознаю, что есть много вещей, которые я не знаю (и я использую Tmux только пару месяцев, так что это хуже ).

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

Я использую это в качестве конфигурации экрана (я думаю, что я адаптировал это из настроек Ubuntu по умолчанию screenrc):

shell -$SHELL
startup_message off
defscrollback 1000
hardstatus alwayslastline '%{= wk}%?%-Lw%?%{r}(%{k}%n*%f%t%?(%u)%?%{r})%{k}%?%+Lw%?%?%= %m/%d %C%A'
activity ''
termcapinfo xterm* 'hs:ts=\\E]2;:fs=\\007:ds=\\E]2;screen\\007'

Это простая конфигурация, чтобы строка состояния отображалась в нескольких цветах, но я уверен, что есть еще кое-что, что я могу сделать с screen и Tmux, и хотел бы узнать это.

CoreDump
источник
zombie qrдержит окно открытым, даже если процесс не работает, и позволяет qзакрыть его или rвоскресить. Полезно для проверки программного обеспечения.
Энси

Ответы:

4

Это может быть немного просто для этой толпы, но я нашел полезным добавить это в конец .profile, чтобы при удаленном входе в систему через ssh я мог прочитать MOTD, а затем переключиться на экран.

if [ -n "$SSH_TTY" ]
then
        read -p "Press <ENTER> to continue." enterkey
        exec /usr/bin/screen -D -R
fi
bgvaughan
источник
3

У меня есть это в моем .bashrc. Если вы не работаете с экраном, эта функция вызывается sshкак обычно, когда выполняется. Если вы работаете внутри экрана (и вы не изменили значение по умолчанию $TERM), он сначала устанавливает имя окна для удаленного хоста (вместе с любыми необязательными параметрами). Очень удобно отслеживать удаленные соединения, когда у вас много открытых, что, как мне кажется, является частым явлением в нашей работе.

function ssh () {
if [ $TERM = "screen-bce" ]
    then
    screen -X title "$*" 
    /usr/bin/ssh $*
else
    /usr/bin/ssh $*
fi
}

Я также использую bind ^A windowlist -bдля быстрого доступа к списку окон (просто дважды нажмите Ctrl-A).

Простая поддержка ssh-agent для всех окон:

setenv SSH_AUTH_SOCK $HOME/.screen-ssh-agent
screen 10 ssh-agent -a $SSH_AUTH_SOCK $SHELL

Затем в любом окне вы делаете ssh-add только один раз, когда начинаете новый сеанс.

Наконец, при подключении к сеансу удаленного экрана из другого сеанса экрана можно использовать screen -x -e ^Vvдля установки последовательности управления значение CTRL-V (например). Это позволяет избежать необходимости цепочки CTRL-As для управления удаленным сеансом.

Эдуардо Иванец
источник
0

Вы могли бы рассмотреть Byobu , который по сути представляет собой набор из сотен советов, приемов, конфигураций, комбинаций клавиш, сценариев состояния и лучших практик, ориентированных на screenи tmux.

Дастин Киркланд
источник
0

Несмотря на то, что я начал использовать tmux для панелей, я все еще использую экран для мультиплексирования окон внутри. Предположительно, tmux обладает такой функциональностью, но переключение панелей из одного окна в другое не является для меня интуитивно понятным, и два подключенных средства просмотра tmux не могут просматривать разные окна в рамках одного и того же демона (поведение screen -x), таким образом, решение screen-in-tmux. Это две привязки tmux.conf, на которые у меня ушло больше всего времени, и я использую их каждый день.

Первый, bind M (ctrl-b shift-M), переключает tmux между средством выбора панели мыши и выделением / копированием мыши. Вы все еще можете копировать / вставлять в режиме выбора панели, но вы должны удерживать клавишу shift (и если вы привыкли к этому, копирование / вставка в любом другом приложении сделает вас немного несчастным, позвольте мне сказать вам). Макрос также делает визуально очевидным, какой режим выбран в данный момент.

bind M set mouse-select-pane \; if '[ "`tmux show -v mouse-select-pane`"= "on" ]' "set status-bg cyan \; set pane-active-border-bg cyan" "set status-bg green \; set pane-active-border-bg default"

Второй, bind CL (ctrl-b ctrl-l), возьмет любой макет из 4 панелей и превратит его в мой предпочтительный макет. Часто я обнаруживаю, что нажал ctrl-d на панели, которая, как мне казалось, находилась внутри экрана, чтобы закрыть его, но вместо этого не было сеанса экрана, и он закрывал панель. Так как мой макет v-split, h-split, v-split и некоторое изменение размера, если я случайно закрыл любое, кроме последнего окна, становится болью (без каламбура) закрывать любые промежуточные панели между тем, которое мне нужно воссоздать и последнее, затем заново создайте и измените размеры панелей и, наконец, заново присоедините все сеансы экрана, которые мне, возможно, пришлось отсоединить при уничтожении панелей. С помощью этого макроса я могу создать новую панель ctrl-b {(связывание по умолчанию для swap-pane -U), пока она не вернется в правильном порядке, затем нажать макрос и все вернется в нормальное состояние. Мой предпочтительный макет вряд ли совпадает с вашим,list-windows Команда, чтобы получить строку макета, как показано ниже.

bind C-L select-layout a18e,155x94,0,0[155x18,0,0,6,155x75,0,19{81x75,0,19,31,73x75,82,19[73x22,82,19,32,73x52,82,42,33]}]

Если это слишком наивно для вашего вкуса, всегда есть tmuxinator для управления панелями.

Андрей Домашек
источник