Так что я большой поклонник мультиплексоров вроде Экран GNU и 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'
Это простая конфигурация, позволяющая отображать строку состояния с помощью некоторых цветов, но я уверен, что с экраном и Tmux я могу делать больше вещей, и я хотел бы знать об этом.
Это может быть немного проще для этой толпы, но я счел полезным добавить это в конец .profile, чтобы при удаленном входе в систему через ssh я мог прочитать MOTD, а затем переключиться на экран.
if [ -n "$SSH_TTY" ]
then
read -p "Press <ENTER> to continue." enterkey
exec /usr/bin/screen -D -R
fi
У меня это есть в моем .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 для управления удаленным сеансом.
Вы можете рассмотреть Byobu, который по сути представляет собой собрание сотен советов, приемов, конфигураций, привязок клавиш, сценариев состояния и передовых практик, ориентированных на screen
и tmux
.
Несмотря на то, что я начал использовать tmux для панелей, я все еще использую screen для мультиплексирования окон внутри. 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 C-L (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 для управления панелями.