Prečo tmux a vim tlač odpadky v mojom SSH wrapper skript?

0

Otázka

Napísal som SSH wrapper skript, ktorý vykoná miestne linky úpravy. Je vyvolané podobne ako SSH. Napríklad: python3 sshwrapper.py [email protected] -CX. Problém je, že keď som sa pripojiť k vzdialenému počítaču pomocou tohto skriptu a použitie vim alebo tmux tam, nejaké odpadky je vytlačené. Tento problém nie je špecifický pre SSH, pretože problémy sa zobrazia, aj keď som používať tento skript zábal bash namiesto ssh.

Príklady:

  • Po spustení tmuxniektoré odpadky je vytlačené po bash riadka:

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

  • Pri otváraní nového súboru v editore Vim pomocou vim mynewfile.txt, táto sa zobrazí v prvom riadku:

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

Ako môžem opraviť problém?

Je to skript na otázku:

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()

Ja používam Python 3.8.10 na Ubuntu 20.04 na oboch môj lokálny počítač a vzdialeným počítačom. Toto je self-vzdelávací projekt, tak píšem program pomocou Python štandardné knižnice len.

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

Tam je zlé hack, ktoré môžete vyskúšať. Po ssh do stroja skúste env premennej LS_COLORS

export LS_COLORS=none

Táto zmena bude pretrvávať vo vašom relácie.

2021-11-26 07:23:48

export LS_COLORS=none nemá žiadny vplyv na situáciu.
Flux

Už ste vyskúšali pypi.org/project/termcolor
gettinggud

Toto je self-vzdelávací projekt, tak píšem program pomocou Python štandardné knižnice len.
Flux

V tomto prípade všetko, čo môžem odporučiť, je pridať niektoré filtre na zobrazenie alebo odstránenie farby: odkaz odkaz. Pekný projekt btw!
gettinggud

Čo je príčinou tohto problému?
Flux
0

Vo vašom bashrc:

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

Vo vašom .tmux.conf:

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

2021-11-30 14:19:56

Odpadky stále sa zobrazí na oboch tmux a vim.
Flux
0

Skúste spustiť skript z rôznych termináli (najlepšie nastavené na predvolené hodnoty) a pozrite sa, či máte stále problém.

2021-12-03 06:15:39

V iných jazykoch

Táto stránka je v iných jazykoch

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