ทำไม tmux และ vim พิมพ์อยู่ในถังขยะของฉันแบบ ssh wrapper สคริปต์?

0

คำถาม

ฉันต้องเขียนเป็นแบบ ssh wrapper สคริปต์ที่ท้องเส้นการแก้ไข. มันเป็น invoked เหมือนๆกันกับริการ ssh. สำหรับตัวอย่าง: python3 sshwrapper.py [email protected] -CX. ปัญหาก็คือตอนที่ฉันเชื่อมต่อให้เป็นคอมพิวเตอร์ปลายทางการใช้สคริปต์นี้และใช้ vim หรือ tmux มีบางอย่างถังขยะเป็นกตีพิมพ์ ปัญหานี้ไม่ได้เจาะจงให้บริการ ssh ตั้งแต่ปัญหาก็ปรากฏตอนที่ฉันใช้สคริปต์นี้ต้องห่อ bash แทนที่จะเป็น ssh.

ตัวอย่าง:

  • หลังจากเริ่ม tmuxบางถังขยะเป็นกพิมพ์หลังจากคนตบให้แจ้งเตือน:

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

  • เมื่อมีการเปิดแฟ้มใหม่ใน Vim ใช้ vim mynewfile.txtนี่ดูเหมือนบนเส้นแรกของกรอบ:

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

ยังไงฉันแก้ไขปัญหา?

นี่เป็นสคริปต์อยู่ในคำถาม:

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

ฉันใช้ไพธอน 3.8.10 บ Ubuntu 20.04 บทั้งสองของฉันท้องถิ่นคอมพิวเตอร์และทางไกลบนเครื่องคอมพิวเตอร์ นี่เป็นตัวการศึกษาโครงการดังนั้นฉันเขียนโปรแกรมโดยใช้ไพธอนมาตรฐานบรรณารักษ์เท่านั้น

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

มีคนร้ายแฮคคุณสามารถลองดู หลังจากบริการ ssh เข้าไปในเครื่องลองการเอาออกซองตัวแปร LS_COLORS

export LS_COLORS=none

การเปลี่ยนแปลงครั้งก็จะยังอยู่ในวาระงานของคุณ.

2021-11-26 07:23:48

export LS_COLORS=none ไม่มีลูกเล่นสถานการณ์ก่อน
Flux

คุณพยายาม pypi.org/project/termcolor
gettinggud

นี่เป็นตัวการศึกษาโครงการดังนั้นฉันเขียนโปรแกรมโดยใช้ไพธอนมาตรฐานบรรณารักษ์เท่านั้น
Flux

ในกรณีนี้ทั้งหมดที่ฉันสามารถเสนอมานั้นคือเพื่อเพิ่มตัวกรองเพื่อแสดง/ลบสี: เชื่อมต่อ เชื่อมต่อ. ดีจังโครงการ btw!
gettinggud

มันคืออะไรใช่จากสาเหตุของปัญหาหรอ?
Flux
0

ในของคุณ bashrc:

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

ในของคุณ.tmux.conf:

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

2021-11-30 14:19:56

กองขยะไปได้.ออกยังเหมือนว่าสำหรับทั้งสอง tmux และ vim.
Flux
0

พยายามที่จะวิ่งหนีของสคริปต์จากต่างออกโปรแกรมเทอร์มินัล(โดยเฉพาะตั้งค่าปริยาย)และมองเห็นถ้าคุณยังคงมีปัญหาแล้ว

2021-12-03 06:15:39

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่