2012-07-05 31 views
7

Sau reattaching một màn hình hoặc tmux phiên qua ssh, tôi thường gặp phải hai vấn đề:bàn phím IO bị hỏng sau khi lắp lại để tmux/màn hình

  • vim hoàn tab đang bị hỏng. :e <Tab> sản xuất :e ^I thay vì đề xuất tệp. Tương tự cho các thẻ (:tj). Đóng cửa và mở lại vim sửa lỗi này, nhưng với chi phí bị mất trạng thái vim.
  • R không thể tạo đồ họa. Tôi đã bật chuyển tiếp X11 (ssh -X -Y). Đóng cửa và mở lại không giúp được gì.

Tôi không thể cố tình tạo lại sự cố bằng cách đóng cửa sổ ssh và đính kèm lại. Sự cố thường được quan sát thấy sau một thời gian dài mà không cần kết nối mạng giữa việc kết nối lại và thường tách rời đột ngột (mất kết nối mạng).

Trả lời

3

Vim tab hoàn thành:

Đây là một vấn đề với mô phỏng thiết bị màn hình/tmux của. Nếu các tab hoạt động trong trình bao của bạn (ví dụ: bash), có khả năng là tín dụng của trình bao; nó biết để lập bản đồ chuỗi điều khiển cho bạn trong khi vim thì không. Có lẽ, bạn có thể sửa lỗi này theo cách tương tự, nhưng sau đó bạn sẽ gặp phải vấn đề trong một số chương trình tương tác khác.

Tôi không thể nói chuyện với tmux, nhưng đối với màn hình, bạn nên xem xét cập nhật ~/.screenrc của mình. Mỏ, được sao chép từ mặc định đi kèm với Redhat (mà tôi không còn sử dụng ...), bao gồm:

#xterm understands both im/ic and doesn't have a status line. 
#Note: Do not specify im and ic in the real termcap/info file as 
#some programs (e.g. vi) will not work anymore. 
termcap xterm [email protected]:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l 
terminfo xterm [email protected]:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l 

Lưu ý rằng nhận xét, nó có thể cho biết vấn đề của bạn.

Một tham chiếu đến vi, mà có thể hoặc không có thể đã đến từ screenrc Redhat, là:

# Yet another hack: 
# Prepend/append register [/] to the paste if ^a^] is pressed. 
# This lets me have autoindent mode in vi. 
register [ "\033:se noai\015a" 
register ] "\033:se ai\015a" 
bind ^] paste [.] 

Hy vọng rằng một hoặc cả hai sẽ giúp, nếu không tôi đã chỉ bạn đi đúng hướng để nghiên cứu những gì bạn cần để sửa lỗi mô phỏng thiết bị đầu cuối màn hình/tmux của bạn. Có lẽ câu trả lời cho screen, vimrc, and bashrc qua tại LinuxQuestions.org có thể giúp thêm.


X11 Forwarding:

Khi bạn đầu tiên màn hình ra mắt, $ DISPLAY được thừa hưởng. Ví dụ, tôi tận dụng điều này trên máy chủ TV của tôi; Tôi khởi động màn hình tại địa phương (DISPLAY=localhost:0), sau đó khi tôi kết nối với nó qua SSH, bất cứ điều gì tôi làm liên quan đến X bật lên trên TV. Rõ ràng, đây không phải là tất cả trường hợp sử dụng của bạn; Tôi chỉ đang cố gắng giáo dục bạn về cách nó hoạt động để bạn có thể hiểu được giải pháp.

Nếu bạn đang kết nối lại với phiên màn hình/tmux được khởi chạy bởi kết nối SSH cũ, bạn có thể may mắn và kết nối với cùng màn hình X (SSH mặc định là localhost: 10.0 và sau đó tăng mỗi lần tìm thấy xung đột), nhưng điều đó không có vẻ như nó đang xảy ra cho bạn. (The "localhost" phần là không bắt buộc, như là" .0" phần. Những người không nên quan trọng đối với mục đích của bạn. DISPLAY=:10 cũng giống như DISPLAY=localhost:10.0)

Trước bạn kết nối với phiên màn hình/tmux của bạn, hãy xem $ DISPLAY của bạn.

$ echo $DISPLAY 
localhost:10.0 

Sau đó, đăng nhập vào màn hình/tmux và đặt $ DISPLAY theo những gì bạn đã thấy trước đây.

$ screen -r 
$ export DISPLAY=localhost:10.0 

Tôi không nghĩ rằng một trong hai màn hình hoặc tmux là đủ thông minh để đi bất kỳ xa hơn này (hãy xem gương máy chủ truyền hình của tôi, điều này không phải luôn luôn mong muốn, và yêu cầu màn hình/tmux để kiểm tra $ DISPLAY và sau đó hành động tùy thuộc vào tính sẵn có của nó là một chút nhiều), vì vậy bạn phải làm điều này bằng tay.

(Điều này có thể gây phiền toái nếu bạn giống tôi và thêm screen -r >/dev/null 2>&1 vào ~/.bashrc. Tôi không gặp phải vấn đề này vì tôi cố gắng tránh chuyển tiếp X11 bất cứ khi nào có thể do chậm như mật đường và tất nhiên là không tồn tại các ngắt kết nối SSH.)

0

Vấn đề thứ hai trông giống như biến số DISPLAY. Hãy thử echo $DISPLAY khi bạn đăng nhập lần đầu và một lần nữa khi bạn kết nối lại phiên. nếu chúng khác nhau (đó là những gì tôi nghi ngờ), setenv hoặc export nó với giá trị chính xác.

Đối với vấn đề đầu tiên hãy thử xem xét tại tmux.conf của bạn (hoặc mặc định từ bạn cài đặt) nguyên nhân họ Remapping <TAB> đến những hành động hài hước trong các phiên bản phát triển (như rõ ràng lịch sử) như vậy có lẽ sau các reattach, tmux sở hữu sự kiện và không vim.

Các vấn đề liên quan