Os vários comentários sobre a configuração TERM
, etc., não parecem resolver o problema real.
A explicação mais provável é um problema com permissões que impede que tmux
abra a conexão do pseudo-terminal. Por exemplo, alguém pode ter feito um chmod
ou chown
que quebrou o programa. Você pode ver se esse é o caso observando os resultados de strace
, por exemplo,
TERM=xterm-256color script -c "strace -fo strace.out -s 2048 tmux -v"
19603 open("/tmp/tmux-1001/default.lock", O_WRONLY|O_CREAT, 0600) = 6
19603 open("tmux-client-19603.log", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 6
19603 open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 8
19603 sendmsg(7, {msg_name(0)=NULL, msg_iov(43)=[{" log_debug("spawn: %s -- %s", wp->shell, wp->cmd);
memset(&ws, 0, sizeof ws);
ws.ws_col = screen_size_x(&wp->base);
ws.ws_row = screen_size_y(&wp->base);
switch (wp->pid = forkpty(&wp->fd, wp->tty, NULL, &ws)) {
case -1:
wp->fd = -1;
xasprintf(cause, "%s: %s", cmd, strerror(errno));
return (-1);
/* Destroy a session. */
void
session_destroy(struct session *s)
{
struct winlink *wl;
log_debug("session %s destroyed", s->name);
RB_REMOVE(sessions, &sessions, s);
notify_session_closed(s);
/* Signal handler. */
void
server_signal_callback(int sig, unused short events, unused void *data)
{
switch (sig) {
case SIGTERM:
server_shutdown = 1;
server_send_shutdown();
break;
case SIGCHLD:
server_child_signal();
break;
case SIGUSR1:
event_del(&server_ev_accept);
close(server_fd);
server_fd = server_create_socket();
server_add_accept(0);
break;
}
}
Script started on Sun Jun 26 06:16:07 2016
\n
\E[?1049h
\E(B
\E[m
\E[?1l
\E>
\E[H
\E[2J
\E[?12l
\E[?25h
\E[?1000l
\E[?1006l
\E[?1005l
\E[c
\E[>4;1m
\E[?1004h
\E]112^G
\E[?25l
\E[1;1H
\E[K\r
TERM=xterm-256color script -c "strace -fo strace.out -s 2048 tmux -v"
19603 open("/tmp/tmux-1001/default.lock", O_WRONLY|O_CREAT, 0600) = 6
19603 open("tmux-client-19603.log", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 6
19603 open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 8
19603 sendmsg(7, {msg_name(0)=NULL, msg_iov(43)=[{" log_debug("spawn: %s -- %s", wp->shell, wp->cmd);
memset(&ws, 0, sizeof ws);
ws.ws_col = screen_size_x(&wp->base);
ws.ws_row = screen_size_y(&wp->base);
switch (wp->pid = forkpty(&wp->fd, wp->tty, NULL, &ws)) {
case -1:
wp->fd = -1;
xasprintf(cause, "%s: %s", cmd, strerror(errno));
return (-1);
/* Destroy a session. */
void
session_destroy(struct session *s)
{
struct winlink *wl;
log_debug("session %s destroyed", s->name);
RB_REMOVE(sessions, &sessions, s);
notify_session_closed(s);
/* Signal handler. */
void
server_signal_callback(int sig, unused short events, unused void *data)
{
switch (sig) {
case SIGTERM:
server_shutdown = 1;
server_send_shutdown();
break;
case SIGCHLD:
server_child_signal();
break;
case SIGUSR1:
event_del(&server_ev_accept);
close(server_fd);
server_fd = server_create_socket();
server_add_accept(0);
break;
}
}
Script started on Sun Jun 26 06:16:07 2016
\n
\E[?1049h
\E(B
\E[m
\E[?1l
\E>
\E[H
\E[2J
\E[?12l
\E[?25h
\E[?1000l
\E[?1006l
\E[?1005l
\E[c
\E[>4;1m
\E[?1004h
\E]112^G
\E[?25l
\E[1;1H
\E[K\r
%pre%%pre%%pre%%pre%7777TERM=xterm-256color%pre%087%pre%%pre%o63387%pre%%pre%1bP7077>
19605 open("/dev/null", O_RDWR) = 7
19605 open("tmux-server-19605.log", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 7
19605 open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 9
19605 open("/users/tom/.tmux.conf", O_RDONLY) = 6
19605 open("/usr/share/terminfo/x/xterm-256color", O_RDONLY) = 10
19605 open("/dev/ptmx", O_RDWR) = 10
19605 open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 11
19605 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 11
19605 open("/lib64/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 11
19605 open("/etc/group", O_RDONLY|O_CLOEXEC) = 11
19605 open("/dev/pts/2", O_RDWR|O_NOCTTY) = 11
19605 open("/proc/0/cmdline", O_RDONLY) = -1 ENOENT (No such file or directory)
19605 open("/proc/0/cmdline", O_RDONLY) = -1 ENOENT (No such file or directory)
19605 open("/proc/0/cmdline", O_RDONLY) = -1 ENOENT (No such file or directory)
%pre%%pre%%pre%7777TERM=xterm-256color%pre%087%pre%%pre%o63387%pre%%pre%1bP7077>
19605 open("/dev/null", O_RDWR) = 7
19605 open("tmux-server-19605.log", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 7
19605 open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 9
19605 open("/users/tom/.tmux.conf", O_RDONLY) = 6
19605 open("/usr/share/terminfo/x/xterm-256color", O_RDONLY) = 10
19605 open("/dev/ptmx", O_RDWR) = 10
19605 open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 11
19605 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 11
19605 open("/lib64/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 11
19605 open("/etc/group", O_RDONLY|O_CLOEXEC) = 11
19605 open("/dev/pts/2", O_RDWR|O_NOCTTY) = 11
19605 open("/proc/0/cmdline", O_RDONLY) = -1 ENOENT (No such file or directory)
19605 open("/proc/0/cmdline", O_RDONLY) = -1 ENOENT (No such file or directory)
19605 open("/proc/0/cmdline", O_RDONLY) = -1 ENOENT (No such file or directory)
Uma falha para o mestre "/ dev / ptmx" ou o escravo "/ dev / pts / xx " pararia tmux
.
O log do servidor mostra que ele morre imediatamente depois de gerar um processo, que no código-fonte é o ponto em que ele começa a abrir o pseudo-terminal, por exemplo, (citando window.c
in tmux 1.8):
%pre%
A seguinte mensagem do servidor vem de session_destroy
(citando de session.c
):
%pre%
que é chamado dessa função em server.c
:
%pre%
Quando você executa strace
, pode ver qual sinal está sendo processado.
Os caracteres inesperados são da inicialização normal feita por tmux
. Parte disso pede ao terminal que tipo é, usando "\ 033 [c" (veja Sequências de Controle do XTerm para uma explicação disso). Em uma inicialização normal, tmux
envia várias seqüências de escape. Este aqui pede uma resposta, e quando a resposta chega, tmux
não está mais ouvindo, e simplesmente ecoa em seu shell.
Você obteria essa resposta específica para um VT100 regular.
Por que vale a pena, aqui está uma renderização visível da inicialização, em que \E
é 3
:
%pre%