Вопрос или проблема
Каждый раз, когда я подключаюсь к моей машине с Ubuntu 17.10 с включенным byobu-enable, я получаю новую “сессию”, вместо того чтобы использовать уже существующие сессии.
При подключении:
Сессии Byobu...
1. tmux: foo: 3 окна (создано Sun Jan 28 10:23:59 2018) [204x53] (группа foo)
2. tmux: ba: 1 окна (создано Sun Jan 28 10:24:16 2018) [204x53]
3. Создать новую сессию Byobu (tmux)
4. Запустить оболочку без Byobu (/bin/bash)
При выборе, например, (1), я попадаю в сессию byobu с именем, например, _foo-20462
$ byobu list-session
_foo-20462: 4 окна (создано Sun Jan 28 10:42:20 2018) [204x53] (группа foo)
foo: 4 окна (создано Sun Jan 28 10:23:59 2018) [204x53] (группа foo)
bar: 1 окна (создано Sun Jan 28 10:24:16 2018) [204x53]
Странность в том, что _foo-20462 кажется точной копией сессии “foo”. Единственный способ, которым я могу убить их — это byobu kill-session -t _foo-20462
, но мне кажется, должен быть способ отключить это поведение, так как раньше в предыдущих версиях Ubuntu такого не было.
ИЗМЕНЕНИЕ 2025:
В более новых версиях Byobu можно выбрать, повторно использовать ли сессии, создав файл под названием .reuse-session
в конфигурационной директории Byobu (либо ~/.config/byobu
, либо ~/.byobu
).
Создание этого файла решает проблему без изменения кода, но я оставил оригинальный ответ ниже.
Оригинальный ответ:
У меня была такая же проблема, и я нашел решение. Я создал отчет об этой проблеме:
https://bugs.launchpad.net/byobu/+bug/1750430
Я включил режим детектива и справился с этой проблемой.
Если коротко – либо вызовите tmux
напрямую, либо отмените изменение в select-session.py
Byobu.
Запуск команды tmux
прикрепляет к первой сессии, так что это, вероятно, самый простой “фикс” (странно названные сессии создаются только с бэкендом tmux
, а не с screen
).
Тем не менее, вы можете исправить это и для Byobu.
man byobu
показал, что часть Byobu, отвечающая за выбор сессии, это byobu-select-session
.
which byobu-select-session
направила меня в /usr/bin/byobu-select-session
, которая в свою очередь вызывает /usr/libexec/byobu/include/select-session.py
. Эти пути могут отличаться у вас (я на Fedora).
Строка в select-session.py
, которая создает и именует сессию, выглядит так (в функции attach_session()
):
os.execvp("tmux", ["tmux", "-2", "new-session", "-t", session_name, "-s", "_%s-%i" % (session_name, os.getpid())])
Таким образом, Byobu намеренно создает сессию с именем _%s-%i
, где %s
– это имя сессии, а %i
– это PID.
Изучение Git blame для этой строки показывает этот коммит:
https://github.com/dustinkirkland/byobu/commit/c0050ac51ee8accc3eb35862483bc40b19e3c269
Отмена изменений в этой строке исправляет проблему:
os.execvp("tmux", ["tmux", "-2", "attach", "-t", session_name])
…но также, вероятно, удаляет поддержку “группированных сессий tmux”, но я не совсем уверен, для чего они используются, и я могу обойтись без них.
Ответ или решение
Конечно! Давайте разберемся с проблемой повторного создания сессий в Byobu при каждом подключении.
Теория (Theory)
Byobu — это улучшенный визуальный интерфейс для популярных оконных менеджеров командной строки, таких как tmux и screen. Он обеспечивает удобный интерфейс для управления множеством конфигураций и сессий вашего терминала. При использовании Byobu с бэкендом tmux может возникнуть проблема, когда при каждом подключении создается новая сессия, вместо повторного подключения к существующей. Это происходит из-за специфического поведения Byobu в Ubuntu 17.10 и некоторых других дистрибутивах.
Принцип работы Byobu заключается в создании и управлении сессиями по определенному шаблону. В случае, описанном вами, Byobu создает сессии с именем формата _foo-20462, что оказывается малыми изменениями в поведении по сравнению с привычным.
Пример (Example)
На вашей системе Ubuntu 17.10 при запуске Byobu вы наблюдаете следующее:
- Каждый раз при подключении вы видите список существующих сессий.
- При выборе одной из них, например (1), создается новая сессия с названием _foo-20462, которая является копией существующей foo.
Этот механизм обратной совместимости может быть неочевидным, потому что Byobu пытается создать "групповые сессии", что было введено для поддержания определенных функциональных возможностей. Эта новая сессия выглядит как клон основной, что при попытке повторного подключения становится скорее переплетением сессий вместо их прямого использования.
Применение (Application)
Чтобы устранить эту проблему и настроить Byobu на повторное использование существующих сессий, можно воспользоваться следующими методами.
1. Создание файла .reuse-session
Начиная с более новых версий Byobu, разработчики ввели возможность контролировать поведение Byobu для сессий путем создания файла .reuse-session в конфигурационной папке Byobu. Выполните следующие шаги:
- Создайте конфигурационный файл:
touch ~/.config/byobu/.reuse-session
или, в зависимости от установки:
touch ~/.byobu/.reuse-session
Наличие этого файла заставит Byobu пытаться повторно использовать существующую сессию вместо создания новой.
2. Редактирование исходного кода Byobu
Вы можете изменить исходный код Byobu, чтобы он вел себя так, как вам требуется. Для этого перейдите к скрипту select-session.py, который находится в /usr/libexec/byobu/include/
(путь может отличаться, в зависимости от дистрибутива):
- Найдите и отредактируйте строку, отвечающую за создание новой сессии с использованием PID:
os.execvp("tmux", ["tmux", "-2", "new-session", "-t", session_name, "-s", "_%s-%i" % (session_name, os.getpid())])
Замените её на:
os.execvp("tmux", ["tmux", "-2", "attach", "-t", session_name])
Однако будьте осторожны: эта модификация удаляет возможность создания групповых сессий в tmux, если вам это необходимо. Если вы не знакомы с возможностями групповых сессий, которые позволяют одному пользователю подключаться к одной и той же сессии под разными именами, то, возможно, этот шаг не повлияет на вас.
3. Прямой вызов tmux
Если Byobu продолжает доставлять неудобства, проще всего может оказаться вызов tmux напрямую. Это позволяет обойти странное поведение Byobu, так как tmux по умолчанию подключается к первой доступной сессии:
- Запустите команду:
tmux attach
Эта команда попытается подключиться к существующей сессии. Если сессий несколько, её можно дополнительно уточнить параметрами.
Используя эти подходы, вы можете привести поведение Byobu в соответствие с вашими ожиданиями. Важно помнить, что поведение может меняться в зависимости от версии системы и самого Byobu, поэтому рекомендовано проверять обновления и документацию для конкретной версии.