LINUX.ORG.RU

Долго запускается vim под tmux

 , ,


0

1

Дано: Ubuntu 18.04, tmux 2.6, vim-gtk3:

VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Apr 10 2018 21:31:58)
Included patches: 1-1453

Проблема: vim долго стартует под tmux (больше секунды). Виновник находится достаточно быстро по --startuptime:

1001.549  1000.627: xsmp init

Это соединение с X-сессией для работоспособности буфера обмена.

Вне tmux или по vim -X или в другом дистрибутиве всё работает, как положено, а вот в убунте борода.

Лёгкий гуглёж навёл только на советы отключить иксовый буфер обмена в виме, что не рассматривается как решение. Может, сталкивался кто-нибудь из местных с этой же проблемой и имеет своё решение?

UPD: Последовательность действий перед проявлением такая:

  • Стартуем сервер tmux, создавая сессию
  • Запускаем vim — всё нормально
  • logout & login
  • tmux attach
  • Запускаем vim — задержка в секунду перед стартом
Deleted

Последнее исправление: ecko (всего исправлений: 1)

Ответ на: комментарий от mos

Воооот! Спасибо, с этим уже можно обратиться в убунтовский багтрекер.

Прикол в том, что до этого стоял арч, и проблемы (вроде?) не было (по крайней мере, не припомню).

Под рукой ещё есть федора, но в ней проверить это нельзя вообще — при логауте из иксовой сессии прибиваются все сессии тмукса :-))

Deleted
()
Ответ на: комментарий от Deleted

истинно федоровское решение ящетаю

mos ★★☆☆☆
()
Ответ на: комментарий от mos

Жобе щитает что это спаситель галереи, бо там ничего больше нет.

Ты только попроси, я еженедельно буду постить скриншот с awesome, у меня идей под реализацию скопилось на сотни скриншотов!

r3lgar ★★★★★
()
Ответ на: комментарий от r3lgar

Если идти тропой votafak-а, то идеи совершенно не обязательны. Перегруппировал окна, написал пресную херню в пост — вуаля, пост готов!

Deleted
()
Ответ на: комментарий от Deleted

Под рукой ещё есть федора, но в ней проверить это нельзя вообще — при логауте из иксовой сессии прибиваются все сессии тмукса :-))

/etc/systemd/logind.conf:
KillUserProcesses=no
r3lgar ★★★★★
()
Ответ на: комментарий от Deleted

Если идти тропой votafak-а, то идеи совершенно не обязательны.

Но я ж не ватофаг. Да и скриншоты мои самые незаметные (на фоне танги их просто не видно xD).

r3lgar ★★★★★
()
Ответ на: комментарий от Deleted

Хопача, не знал, спасибо!

Так в документации man:logind.conf(5) всё расписано. Уж что мне нравится в systemd — так это детальная документация.

в федоре та же самая фигня

Мне кажется, дело в VIM, не в tmux. Точнее в VIM из-за поведения tmux.

r3lgar ★★★★★
()
Последнее исправление: r3lgar (всего исправлений: 1)
Ответ на: комментарий от r3lgar

Кстати, юзает ли tmux/vim dbus?

ecko@victoria in ~
λ ldd /usr/bin/vim | grep dbus
        libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007fb552917000)
ecko@victoria in ~
λ ldd /usr/bin/tmux | grep dbus
ecko@victoria in ~
1 λ

Как-то так

Deleted
()
Ответ на: комментарий от r3lgar

Так в документации man:logind.conf(5) всё расписано

Меня, если честно, это не настолько парило, чтобы вообще задумываться, в какую сторону копать %)

Deleted
()
Ответ на: комментарий от Deleted

Если разбираться дальше самому, то видимо нужно выкачать дебажные символы или собрать поделия(на самом деле скорее всего только vim) в debug режиме и профилировать, где оно тормозит. Например, с помощью perf или oprofile.

Правда, лучше бы придумать способ как это попроще воспроизвести (без перелогина), но, кажется, что это равносильно поиску проблемы.

onhydro
()
Ответ на: комментарий от onhydro

SmcOpenConnection - больше там тормозить по идее нечему.

А вот чито это за функция и почему она может тормозить в заданном сценарии, надо бы кастануть знатоков по иксовому api. Кмк, это будет гораздо более продуктивно, чем изучать сей вопрос самостоятельно.

onhydro
()
Ответ на: комментарий от onhydro

Спасибо за помощь! Попробую сам мельком глянуть на днях. Ну, и в багтрекер всё-таки схожу, мб там чего подскажут.

И что-то мне подсказывает, что в первую очередь стоит сходить в багтрекер тмукса.

Deleted
()
Ответ на: комментарий от Deleted

Как раз скорее в трекер vim'a. Но, кмк, надо ещё одну вещь проделать перед этим.

Попробуй сравнить вывод env до логаута, после аттача и после аттача в новом окне.

onhydro
()
Ответ на: комментарий от onhydro

Собрал даже не совсем так, а:

  • До запуска tmux
  • После запуска tmux
  • После логаута, до аттача
  • После аттача

2 и 4 не отличаются совсем, tmux запоминает свой env. Между 1 и 3 есть интересные отличия:

<...>
-XDG_SESSION_ID=c22
+XDG_SESSION_ID=c24
<...>
-WINDOWID=25165827
+WINDOWID=27262979
<...>
-XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session6
+XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session7
<...>
-SESSION_MANAGER=local/victoria:@/tmp/.ICE-unix/8120,unix/victoria:/tmp/.ICE-unix/8120
+SESSION_MANAGER=local/victoria:@/tmp/.ICE-unix/8750,unix/victoria:/tmp/.ICE-unix/8750

Deleted
()
Ответ на: комментарий от Deleted

Кмк, WINDOWID - лишнее, а вот всё что про SESSION, особенно путь к сокету, уже действительно выглядит интересно.

2 и 4 не отличаются совсем

Похоже, в этом и проблема. Попробуй перед запуском vim'a задать эти переменные в tmux вручную. Если это полечит, то видимо, стоит и правда им на трекер писать.

onhydro
()
Ответ на: комментарий от onhydro

Дружище, спасибо тебе ещё раз за терпение и помощь! Обновление переменной SESSION_MANAGER чинит проблему.

А вопрос с тем, чей это баг, остаётся всё ещё неразрешённым. Мне вот кажется, что tmux-a. Ему имеет смысл обновлять эту переменную перед непосредственным аттачем.

Deleted
()
Ответ на: комментарий от onhydro

В таком случае помечаю тему решённой. Багу заведу им сегодня или на днях.

Спасибо!

Deleted
()
Ответ на: комментарий от Deleted

Как-то так

Так значит тебе после реаттача надо пнуть ${DBUS_SESSION_BUS_ADDRESS}. Возможно, VIM стучится или не в ту шину, или долго раздупляет, я в dbus не очень.

Меня, если честно, это не настолько парило, чтобы вообще задумываться, в какую сторону копать %)

Зато теперь у тебя есть ещё один тестовый полигон для решения этого треда.

r3lgar ★★★★★
()
Ответ на: комментарий от r3lgar

Так значит тебе после реаттача надо пнуть ${DBUS_SESSION_BUS_ADDRESS}.

Почти так. Нужно было пнуть SESSION_MANAGER, вот тут решение.

Deleted
()
Ответ на: комментарий от xaizek

Вечерком проверю, сейчас пока не с руки.

Deleted
()

vim больше не поддерживается, пожалуйста используйте vimd

darkenshvein ★★★★★
()
Ответ на: комментарий от Deleted

UPD: потому что эта опция обновит SESSION_MANAGER только в новых пейнах

Deleted
()

слышал про проблеммы с плагином vim-tmux.

q13
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.