
Я только что установил tmux на Ubuntu 10.04 и попытался переназначить префиксный ключ, C-a
создав файл ~/.tmux.conf
со следующими строками:
set-option -g prefix C-a
unbind-key C-b
При запуске tmux, как обычно, так и с помощью -f ~/.tmux.conf
, префикс по умолчанию фактически один и тот жеC-b
Никаких ошибок или предупреждений нет.
Есть идеи, что не так с загрузкой конфы?
решение1
Файл ~/.tmux.conf загружается при первом запуске сервера tmux. Поэтому, если есть существующие сеансы tmux, запуск нового сеанса с помощью tmux
не приведет к перезагрузке файла .tmux.conf. Попробуйте перезапустить сервер tmux: используйте команду, tmux list-sessions
чтобы проверить, есть ли существующие сеансы. Выйдите из них (например, tmux attach
затем закройте все окна и выйдите). После того, как все сеансы будут закрыты, попробуйте tmux
еще раз. На этот раз перепривязка должна сработать.
решение2
Чтобы перезагрузить ~/.tmux.conf, не завершая сеанс, можно просто сделать следующее:
<prefix> :source-file /absolute/path/to/your/.tmux.conf
где <prefix>
по <C-b>
умолчанию.
решение3
запустите внутри сеанса tmux:
tmux source-file /absolute/path/to/your/.tmux.conf
решение4
12 лет назад
Агеройоставилкомментарий.
It Works For Me™. Попробуйте запустить
strace -s9999 -f -o tmux.strace tmux -c true
и опубликуйте выводgrep -C5 'tmux\.conf' tmux.strace
. – Жиль 'SO- stop being evil' 14 сентября 2010 г. в 20:24
Мастер-класс по преуменьшению
Без всякой фанфаронства они бросили одно предложение в комментарии, которое должно было быть, не толькоОтветно,ответ. Не толькоответна этот вопрос, носправочный ответна целый класс вопросов.
Разбираем это
Что strace -s9999 -f -o tmux.strace tmux -c true
значит?
Это как бы 2 команды в 1. Основная команда — , tmux
но ей дается «префикс»/«обертка», называемая strace
. Это очень похоже на запуск time df
для измерения того, сколько времени требуется для выполнения df
команды.
strace
-s9999
-f
-o tmux.strace
$ man strace | grep -A1 ^NAME
NAME
strace - trace system calls and signals
$ man strace | grep -EA10 '^ *DESCRIPTION($| )'
DESCRIPTION
In the simplest case strace runs the specified command until it exits. It
intercepts and records the system calls which are called by a process and
the signals which are received by a process. The name of each system call,
its arguments and its return value are printed on standard error or to the
file specified with the -o option.
strace is a useful diagnostic, instructional, and debugging tool. System
administrators, diagnosticians and trouble-shooters will find it invaluable
for solving problems with programs for which the source is not readily
available since they do not need to be recompiled in order to trace them.
$ man strace | grep -EA4 '^ *-s($| )'
-s strsize
--string-limit=strsize
Specify the maximum string size to print (the default is 32).
Note that filenames are not considered strings and are always
printed in full.
$ man strace | grep -EA6 '^ *-f($| )'
-f
--follow-forks
Trace child processes as they are created by currently traced
processes as a result of the fork(2), vfork(2) and clone(2) sys‐
tem calls. Note that -p PID -f will attach all threads of
process PID if it is multi-threaded, not only thread with
thread_id = PID.
$ man strace | grep -EA8 '^ *-o($| )'
-o filename
--output=filename
Write the trace output to the file filename rather than to
stderr. filename.pid form is used if -ff option is supplied.
If the argument begins with '|' or '!', the rest of the argument
is treated as a command and all output is piped to it. This is
convenient for piping the debugging output to a program without
affecting the redirections of executed programs. The latter is
not compatible with -ff option currently.
tmux
-c true
$ man tmux | grep -EA4 '^ *-c($| [^ ]*$)'
-c shell-command
Execute shell-command using the default shell. If necessary,
the tmux server will be started to retrieve the default-shell
option. This option is for compatibility with sh(1) when tmux
is used as a login shell.
$ man true | grep -A1 ^NAME
NAME
true - do nothing, successfully
Почему...
использовать -c
с tmux?
Поскольку нас действительно интересует только процесс запуска tmux
, нам не нужно использовать его интерактивно. Поэтому мы дадим ему указание запустить команду вместо нашей обычной интерактивной оболочки.
использовать true
как команду tmux?
Потому что он очень быстро завершает работу и позволит нам сократить журнал.
использовать -o tmux.strace
со strace?
Это просто файл для хранения выходных данных. Назвать что-то сложно. Не было важно сопоставлять базовое имя или расширение с чем-либо еще.
использовать -f
со strace?
Я предполагаю, что вы прочитали отрывок из страницы руководства, а неизбыточный. Любое достаточно сложное приложение будет создавать дочерние процессы. Поскольку tmux
великолепно сложно, мы определенно хотим их также трассировать.
использовать -s9999
со strace?
Поскольку мы записываем вывод в файл, нам не нужно обрезать строку, чтобы она соответствовала ширине нашего терминала. Установите ее большой. Разберитесь с ее отображением позже, если это проблема.
Почемучто-нибудь из этого?
Если полюбой, ты имеешь в виду написать этот длинный ответ...
- Потому что я обучаю инженерные команды и укажу им на этот ответ.
- Потому что Джайлз...
- чертов герой
- имел 0 положительных голосов на свой комментарий в течение 10+ лет
- слишком долго оставалось незамеченным, и я отказываюсь позволить этому продолжаться
Если вы не понимаете, почему этот процессПутьчтобы ответить на вопрос типа «Есть идеи, что не так с загрузкой конференции?» то я бы отослал вас кПроблема XY
Это не толькоспрашивающиекоторые попадают в проблему XY. Этоочень сильнообычно для ответов ~сделать эту ошибку~ делают это также. В этом случае многие ответы на этот вопрос инструктируют читателя, как загрузить/перезагрузить файл конфигурации после начала процесса. Это предполагает игнорирование того факта, что процесс не может загрузить файл так, как должен.
Если вы дошли до этого места, я хочу, чтобы вы усвоили следующее: игнорировать неудачу можно только в том случае, если вы:
- двигаясь мимо блокировщика, чтобы вы могли перестать быть блокировщиком для других
- собираюсь вернуться и исправить проблему правильно позже
Еда на вынос
Многие проблемы можно свести к вопросу «Что не так с загрузкой файла?». Этот вопрос должен пощекотать паучье чутье в форме «Пытается ли он загрузить файл? Что происходит, когда он пытается это сделать?»
Вы можете/должны[?] использовать strace
resolve для всего, что может быть подвергнуто сомнению, например:
- Чего пытается добиться этот процесс?
- Чтоэтопереживаете, когда он пытается сделать это [то, что он пытается сделать]?
Часто этоне провал процессасделать что-то, ноошибка пользователяожидая, что процесс что-то сделает. И процесс сталкивается со многими вещами, о которых пользователь не информирован.
Хватит абстрактных рассуждений. Давайте рассмотрим пример:
$ tmux kill-server; rm tmux.strace; strace -s9999 -f -o tmux.strace tmux -c true
no server running on /tmp/tmux-1000/default
$ ls -lh tmux*
-rw-r--r-- 1 bruno bruno 21K Jun 11 10:58 tmux-client-18358.log
-rw-r--r-- 1 bruno bruno 324M Jun 11 10:58 tmux-server-18360.log
-rw-r--r-- 1 bruno bruno 342K Jun 11 13:48 tmux.strace
$ grep 'tmux\.conf' tmux.strace
521744 readlink("/etc/tmux.conf", 0x7ffe2c0446d0, 1023) = -1 ENOENT (No such file or directory)
521744 readlink("/home/bruno/.tmux.conf", 0x7ffe2c0446d0, 1023) = -1 ENOENT (No such file or directory)
521744 readlink("/home/bruno/.config/tmux/tmux.conf", 0x7ffe2c0446d0, 1023) = -1 ENOENT (No such file or directory)
$ ls -lA /home/bruno/.config/tmux
-rw-r--r-- 1 bruno bruno 307 Jun 10 20:29 tmux.config
Видите? Посмотрите на вывод последних 2 команд. Может быть, вам поможет, если я покажу, как это исправить.
$ mv ~/.config/tmux/tmux.config \
~/.config/tmux/tmux.conf
$ tmux kill-server; rm tmux.strace; strace -s9999 -f -o tmux.strace tmux -c true
no server running on /tmp/tmux-1000/default
$ grep -A2 '\.config/tmux/tmux\.conf' tmux.strace
527872 openat(AT_FDCWD, "/home/bruno/.config/tmux/tmux.conf", O_RDONLY) = 8
527872 newfstatat(8, "", {st_mode=S_IFREG|0644, st_size=307, ...}, AT_EMPTY_PATH) = 0
527872 read(8, "set -sg escape-time 0\nset -g mode-keys vi\n\n# remap prefix from 'C-b' to 'C-f'\nset-option -g prefix C-f\nunbind-key C-b\nbind-key C-f send-prefix\n\n# split panes using | and -\nbind | split-window -h\nbind - split-window -v\n# bind \"\33OA\" # scroll natural up\n# bind \"\33OB\" # scroll natural down\nunbind '\"'\nunbind %\n\n", 4096) = 307
Примечание: последняя строка — это все содержимое моего (ранее неверно названного) ~/.config/tmux/tmux.conf
файла.