
Ich habe gerade tmux auf Ubuntu 10.04 installiert und versucht, den Präfixschlüssel neu zuzuordnen, C-a
indem ich die Datei ~/.tmux.conf
mit diesen Zeilen erstellt habe:
set-option -g prefix C-a
unbind-key C-b
Beim Starten von tmux, sowohl regulär als auch mit -f ~/.tmux.conf
, ist das Präfix praktisch das gleiche StandardC-b
Es liegen keinerlei Fehler oder Warnungen vor.
Irgendeine Idee, was beim Laden der Konferenz falsch ist?
Antwort1
Die Datei ~/.tmux.conf wird geladen, wenn der tmux-Server zum ersten Mal gestartet wird. Wenn also vorhandene tmux-Sitzungen vorhanden sind, tmux
führt das Starten einer neuen Sitzung nicht dazu, dass die Datei .tmux.conf neu geladen wird. Versuchen Sie, den tmux-Server neu zu starten: Verwenden Sie den Befehl, tmux list-sessions
um zu sehen, ob vorhandene Sitzungen vorhanden sind. Beenden Sie sie (z. B. tmux attach
schließen Sie alle Fenster und beenden Sie das Programm). Wenn alle Sitzungen beendet sind, versuchen Sie es tmux
erneut. Diesmal sollte die Neubindung funktionieren.
Antwort2
Um Ihre ~/.tmux.conf neu zu laden, ohne Ihre Sitzung zu beenden, können Sie einfach Folgendes tun:
<prefix> :source-file /absolute/path/to/your/.tmux.conf
wobei standardmäßig <prefix>
ist .<C-b>
Antwort3
Führen Sie es in Ihrer Tmux-Sitzung aus:
tmux source-file /absolute/path/to/your/.tmux.conf
Antwort4
vor 12 Jahren
AHeldhinterließ eineKommentar.
Es funktioniert bei mir™. Versuchen Sie es auszuführen
strace -s9999 -f -o tmux.strace tmux -c true
und veröffentlichen Sie die Ausgabe vongrep -C5 'tmux\.conf' tmux.strace
. – Gilles 'SO- stop being evil' 14. September 2010 um 20:24
Eine Meisterklasse in Sachen Understatement
Ohne großes Tamtam ließen sie einen einzigen Satz in einem Kommentar fallen, der hätte sein sollen, nicht nureine AntwortAber,die Antwort. Nicht nurdie Antwortauf diese Frage, aberdie Referenzantwortauf eine ganze Klasse von Fragen.
Brechen sie ab
Was strace -s9999 -f -o tmux.strace tmux -c true
bedeutet?
Es ist so etwas wie 2 Befehle in 1. Der Hauptbefehl ist, tmux
aber er erhält ein „Präfix“/„Wrapper“ namens strace
. Dies ist sehr ähnlich wie „running “ time df
, um zu messen, wie viel Zeit zum Ausführen des Befehls benötigt wird 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
Warum...
mit tmux verwenden -c
?
Da wir uns eigentlich nur für den Startvorgang von interessieren tmux
, müssen wir es nicht interaktiv verwenden. Daher weisen wir es an, anstelle unserer normalen interaktiven Shell einen Befehl auszuführen.
true
als tmux-Befehl verwenden ?
Weil es sehr schnell beendet wird und unser Protokoll kurz hält.
mit strace verwenden -o tmux.strace
?
Es ist nur eine Datei, um die Ausgabe zu speichern. Dinge zu benennen ist schwierig. Es war nicht wichtig, den Basisnamen oder die Erweiterung mit irgendetwas anderem abzugleichen.
mit strace verwenden -f
?
Ich gehe davon aus, dass Sie den Auszug aus der Manpage gelesen haben und nichtredundieren. Jede einigermaßen komplexe Anwendung wird untergeordnete Prozesse erstellen. Da die Anwendung tmux
unglaublich komplex ist, möchten wir diese unbedingt auch strace.
mit strace verwenden -s9999
?
Da wir die Ausgabe in eine Datei schreiben, müssen wir die Zeile nicht kürzen, damit sie unserer Terminalbreite entspricht. Stellen Sie sie groß ein. Wenn es ein Problem ist, kümmern Sie sich später um die Anzeige.
Warum machenirgendeins von diesen?
Wenn durchbeliebig, du meinst, ich soll diese verdammt lange Antwort schreiben …
- Weil ich Ingenieurteams schule und sie auf diese Antwort hinweisen werde.
- Weil Giles ...
- ist ein verdammter Held
- hatte 0 Upvotes für seinen Kommentar seit über 10 Jahren
- ist zu lange unbemerkt geblieben, und ich weigere mich, das so weitergehen zu lassen
Wenn Sie nicht verstehen, warum dieser ProzessDer Wegum eine Frage zu beantworten wie „Irgendeine Idee, was beim Laden der Konferenz nicht stimmt?“ dann verweise ich Sie auf dieXY-Problem
Es ist nicht nurFragestellerdie in das XY-Problem fallen. EsäußerstHäufig kommt es auch bei Antworten zu ~diesem Fehler~ vor. In diesem Fall weisen viele Antworten auf diese Frage den Leser an, wie er eine Konfigurationsdatei nach dem Start des Prozesses lädt/neu lädt. Das legt nahe, die Tatsache zu ignorieren, dass der Prozess die Datei nicht wie vorgesehen lädt.
Wenn Sie es bis hierhin geschafft haben, möchte ich Ihnen mit auf den Weg geben:
- Überwinden eines Blockers, um sich selbst als Blocker für andere zu entfernen
- Ich werde später zurückkommen und das Problem richtig beheben
Das wegnehmen
Viele Probleme lassen sich auf die Frage „Was ist beim Laden der Datei falsch?“ reduzieren. Diese Frage sollte einen Spinnensinn kitzeln, wenn sie lautet: „Versucht es, die Datei zu laden? Was passiert dabei?“
Sie können/sollten[?] strace
alles lösen, was in Frage gestellt werden kann, wie:
- Was versucht dieser Prozess zu erreichen?
- Was istEserlebt, wenn es versucht, das [Ding, das es versucht] zu tun?
Oft ist eskein Versagen des Prozessesetwas zu tun, aberein Versagen des BenutzersErwarten, dass der Prozess etwas tut. Und der Prozess erlebt viele Dinge, über die der Benutzer nicht informiert wird.
Doch genug der abstrakten Lehren. Betrachten wir ein Beispiel:
$ 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
Siehst du es? Schau dir die Ausgabe der letzten beiden Befehle an. Vielleicht würde es helfen, wenn ich dir zeige, wie ich es behebe.
$ 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
Hinweis: Die letzte Zeile ist der gesamte Inhalt meiner (zuvor falsch benannten) ~/.config/tmux/tmux.conf
Datei.