Tmux ve vim neden SSH sarıcı komut dosyamda çöp yazdırıyor?

0

Soru

Yerel satır düzenleme yapan bir SSH sarmalayıcı betiği yazdım. Ssh'ye benzer şekilde çağrılır. Örneğin: python3 sshwrapper.py [email protected] -CX. Sorun şu ki, bu komut dosyasını kullanarak uzak bir bilgisayara bağlandığımda ve kullandığımda vim veya tmux orada bazı çöpler basılmış. Bu sorun Ssh'ye özgü değildir, çünkü bu komut dosyasını sarmak için kullandığımda sorunlar da ortaya çıkar bash yerine ssh.

Örnekler:

  • Başladıktan sonra tmux, bazı çöp bash isteminden sonra yazdırılır:

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

  • Vim'de yeni bir dosya açarken vim mynewfile.txt, bu ilk satırda görünür:

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

Sorunu nasıl çözerim?

Söz konusu senaryo budur:

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

Hem yerel bilgisayarımda hem de uzak bilgisayarda Ubuntu 20.04'te Python 3.8.10 kullanıyorum. Bu bir kendi kendine eğitim projesidir, bu yüzden programı sadece Python standart kütüphanelerini kullanarak yazıyorum.

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

Deneyebileceğiniz kötü bir hack var. Makineye ssh girdikten sonra env değişkeni LS_COLORS'U kaldırmayı deneyin

export LS_COLORS=none

Bu değişiklik oturumunuzda da devam edecektir.

2021-11-26 07:23:48

export LS_COLORS=none durum üzerinde hiçbir etkisi yoktur.
Flux

gettinggud

Bu bir kendi kendine eğitim projesidir, bu yüzden programı sadece Python standart kütüphanelerini kullanarak yazıyorum.
Flux

Bu durumda önerebileceğim tek şey, renkleri görüntülemek / kaldırmak için bazı filtreler eklemektir: bağlantı bağlantısı. Güzel proje btw!
gettinggud

Sorunun altında yatan neden nedir?
Flux
0

Bashrc'nizde:

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

İçinde senin .tmux.conf:

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

2021-11-30 14:19:56

Çöp hala hem tmux hem de vım için görünür.
Flux
0

Komut dosyanızı farklı bir terminal uygulamasından çalıştırmayı deneyin (tercihen varsayılanlara ayarlayın) ve sorunun hala devam edip etmediğini görün.

2021-12-03 06:15:39

Diğer dillerde

Bu sayfa diğer dillerde

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