¿Por qué tmux y vim impresión de basura en mi SSH guión envoltorio?

0

Pregunta

He escrito un SSH contenedor de secuencia de comandos que hace de local en la línea de edición. Se invoca de manera similar a SSH. Por ejemplo: python3 sshwrapper.py [email protected] -CX. El problema es que cuando me conecto a un equipo remoto mediante esta secuencia de comandos y el uso de vim o tmux allí, algunos de basura se imprime. Este problema no es específico de SSH, ya que los problemas también aparecen al utilizar esta secuencia de comandos para envolver bash en lugar de ssh.

Ejemplos:

  • Después de iniciar tmux, algunas de basura se imprime después de que el indicador bash:

    abc@me:~$ ^[[?65;1;9c

  • Al abrir un archivo nuevo en el uso de Vim vim mynewfile.txteste aparece en la primera línea:

    ^[[2;2R^[[>65;6003;1c^[]10;rgb:0000/0000/0000^G^[]11;rgb:ffff/ffff/dddd^G

¿Cómo puedo solucionar el problema?

Este es el script en cuestión:

import os
import pty
import select
import signal
import subprocess
import sys

master_fd, slave_fd = pty.openpty()
process = subprocess.Popen(['ssh'] + sys.argv[1:],
                           stdin=slave_fd,
                           stdout=slave_fd,
                           stderr=subprocess.STDOUT,
                           # Important for Ctrl-c in the remote terminal.
                           preexec_fn=os.setsid)

def sigint_handler(_signum, _frame):
    os.write(master_fd, b'\03')  # Send Ctrl-c.
signal.signal(signal.SIGINT, sigint_handler)

def sigtstp_handler(_signum, _frame):
    os.write(master_fd, b'\x1A')  # Send Ctrl-z.
signal.signal(signal.SIGTSTP, sigtstp_handler)

def sigchld_handler(_signum, _frame):
    process.wait()
    sys.exit(process.returncode)
signal.signal(signal.SIGCHLD, sigchld_handler)

while process.poll() is None:
    # Block until there is something to read or write.
    r, w, e = select.select([sys.stdin, master_fd], [], [])
    if sys.stdin in r:
        # Write to SSH.
        user_input = os.read(sys.stdin.fileno(), 4096)
        if not user_input:
            os.write(master_fd, b'\04')  # Send Ctrl-d.
        else:
            os.write(master_fd, user_input)
    if master_fd in r:
        # Read from SSH.
        data = os.read(master_fd, 4096)
        sys.stdout.write(data.decode())
        sys.stdout.flush()

Estoy usando Python 3.8.10 en Ubuntu 20.04 tanto en mi equipo local y el equipo remoto. Este es un proyecto de educación, por lo que estoy escribiendo el programa en Python bibliotecas estándar solamente.

linux pty python termios
2021-11-24 05:56:26
3
0

No es una mala hack usted puede intentar. Después de ssh en la máquina de prueba a quitar env variable LS_COLORS

export LS_COLORS=none

Este cambio va a persistir en su período de sesiones.

2021-11-26 07:23:48

export LS_COLORS=none no tiene ningún efecto sobre la situación.
Flux

gettinggud

Este es un proyecto de educación, por lo que estoy escribiendo el programa en Python bibliotecas estándar solamente.
Flux

En este caso todo lo que puedo sugerir es añadir algunos filtros para mostrar/quitar colores: enlace enlace. Bonito proyecto btw!
gettinggud

¿Cuál es la causa subyacente del problema?
Flux
0

En su bashrc:

alias tmux="TERM=screen-256color-bce tmux"

En su .tmux.conf:

set -g default-terminal "xterm-256color"

2021-11-30 14:19:56

La basura aparece de nuevo después de tanto tmux y vim.
Flux
0

Intente ejecutar la secuencia de comandos desde un terminal diferente de la aplicación (preferiblemente establecen en los valores predeterminados) y ver si usted todavía tiene el problema.

2021-12-03 06:15:39

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................