Tôi cần nối vào đầu ra của thiết bị đầu cuối hiện đang chạy (tty1) từ thiết bị đầu cuối ảo và chụp nó (máy chủ X đang chạy).
Tôi cần nối vào đầu ra của thiết bị đầu cuối hiện đang chạy (tty1) từ thiết bị đầu cuối ảo và chụp nó (máy chủ X đang chạy).
Câu trả lời:
Tôi đã đi qua một công cụ được gọi là ttylog
. Đây là một chương trình Perl có sẵn trên CPAN tại đây . Nó có một vài cảnh báo, một điều là tôi chỉ có thể tìm ra cách gắn vào thiết bị đầu cuối được tạo ra như một phần của ai đó đang nhét vào hộp của tôi. Cái khác là bạn phải chạy nó với các đặc quyền nâng cao (tức là root hoặc sudo).
Nhưng nó đã có tác dụng!
Ssh đầu tiên vào hộp của bạn trong HẠN # 1:
TERM#1% ssh saml@grinchy
Lưu ý tty thiết bị đầu cuối mới này:
TERM#1% tty
/dev/pts/3
Bây giờ trong một thiết bị đầu cuối khác (TERM # 2) chạy lệnh này:
TERM#2% ttylog pts/3
DEBUG: Scanning for psuedo terminal pts/3
DEBUG: Psuedo terminal [pts/3] found.
DEBUG: Found parent sshd pid [13789] for user [saml]
Bây giờ hãy quay lại HẠN # 1 và nhập nội dung, nó sẽ hiển thị trong HẠN # 2.
Tất cả các lệnh tôi đã thử, (trên cùng, ls, v.v.) đã hoạt động mà không gặp sự cố khi sử dụng ttylog
.
gdb
là lựa chọn đầu tiên tôi gặp, trước đây tôi đã từng sử dụng nó, nhưng ít nhất thì nó cũng rất khó chịu. Vui mừng điều này đã giúp bạn ra ngoài!
Quả thực là như vậy. Các thiết bị / dev / vcs * và / dev / vcsa * tương ứng với các thiết bị / dev / tty * (các thiết bị đầu cuối ảo). F1 = tty1 = vcs1 / vcsa1, v.v. Vcs / vcsa giống như tty cho thiết bị đầu cuối ảo "hiện tại".
Với quyền root, bạn chỉ có thể cat các thiết bị này (ví dụ cat / dev / vcs2) và xem những gì trên VT tương ứng (ví dụ / dev / tty2 trên F2) như chụp ảnh nhanh. vcsa * khác với vcs * ở chỗ chúng bao gồm thông tin về kích thước của thiết bị đầu cuối (màn hình). Xin lưu ý bạn, đó chỉ là một ảnh chụp nhanh các ký tự khi chúng hiển thị trên màn hình - được tập hợp từ bộ nhớ được phân bổ cho thiết bị đầu cuối - vì vậy đừng mong đợi kết quả phân tích dễ dàng, dễ dàng.
Hạn chế là nếu thông tin lóe lên quá nhanh, có thể khó nắm bắt. Có lẽ đuôi -f / dev / vcs1 sẽ hoạt động, nếu bạn cần theo dõi một số màn hình (chưa thử bản thân mình)? Đầu tiên có thể dễ dàng nhất là chuyển hướng nó đến một tập tin. Nó cũng có thể là một ý tưởng tốt để sử dụng VT (F1-F6) để xem xét nó, vì các thiết bị đầu cuối sẽ có cùng kích thước. Theo kinh nghiệm của tôi, tốt nhất là sử dụng các thiết bị vcs * - chứ không phải vcsa * -.
Nếu điều đó không hiệu quả, có lẽ một trong những gói "anh lớn" cho phép quản trị viên để mắt đến hoạt động trên thiết bị đầu cuối có thể hoạt động.
PS: Tôi quên hỏi bạn sử dụng HĐH nào. Điều này là dành cho Linux, mặc dù các thiết bị tương tự cũng có thể tồn tại trên các HĐH khác. Hãy thử tìm kiếm "bộ nhớ bảng điều khiển ảo" trong số các trang dành cho thiết bị.
wlan0
, tôi thực sự có một tình huống Catch-22 đang cố gắng gỡ lỗi khi kịch bản này bị lỗi. Giả sử tôi không thể sử dụng một trung tâm usb ... có cách nào để tôi chuyển các ký tự vào / dev / tty1 không?
/dev/tty1
root nhưng tất cả những điều này là hiển thị các ký tự trên màn hình, không nhập chúng
Sử dụng tty
lệnh trong mỗi thiết bị đầu cuối để xác định chúng:
$ tty
/dev/pts/0
$ tty
/dev/pts/1
Giả sử các TTY này, để chuyển hướng thiết bị xuất chuẩn đầu tiên sang thiết bị thứ hai, hãy chạy cái này trong thiết bị đầu cuối đầu tiên:
exec 1>/dev/pts/1
Lưu ý: Bây giờ mọi đầu ra lệnh sẽ hiển thị trên pts / 1
Để khôi phục thiết bị xuất chuẩn mặc định của pts / 0:
exec 1>/dev/pts/0
Xem video này cho một cuộc biểu tình.
Điều này làm việc cho tôi:
Sử dụng bàn phím trên máy tính "A" (tức là máy tính vật lý cần điều khiển), chạy: screen -q
Kết nối với ssh
từ máy tính "B" với máy tính "A".
Trong phiên ssh, gõ: screen -ls
để có id phiên để kết nối (4 chữ số trên hàng có chứa tty ).
Kết nối với phiên trên với: screen -x <session id>
... bằng cách sử dụng số id phiên nhận được từ screen -ls
lệnh trên.
Bất cứ điều gì được nhập vào một trong hai "phiên" sẽ xảy ra trong cả hai "phiên", vì vậy, ví dụ gõ screen -d
sẽ thoát khỏi cả phiên.
Một cách tiếp cận khác là sử dụng screen
tiện ích gnu trên máy cục bộ của bạn. Gọi nó với -L
tùy chọn, hoặc bắt đầu mà không có tùy chọn đó và sử dụng ^aH
chuỗi lệnh. Cách tiếp cận làm cho tất cả đầu vào và đầu ra được ghi vào một tệp có tên screenlog.x
x là số màn hình.
Điều này rất tiện lợi vì không cần cài đặt thêm gì trên máy từ xa.
Vì tôi không bắt đầu tty1 với màn hình nên kịch bản này đã giúp:
Tôi đã sử dụng câu trả lời từ Baard Kopperud ở trên. "128" là 1 dòng tty1 của tôi. Giấc ngủ có thể được đặt thành một số thích hợp.
#!/bin/bash
while true
do
sudo tail -c 128 /dev/vcs1 && echo ""
sleep 10
done
Tôi đã sử dụng điều này trong terminator và định cỡ cột để cuộn là một dòng văn bản.
Mở hai thiết bị đầu cuối. Nhập tty
từng cái và bạn sẽ nhận được id là/dev/pts/nº
Sau đó, trong lần đầu tiên bạn nhập script -f /dev/pts/nºofSecondTerminal
và trong lần thứ hai, bạn làm ngược lại script -f /dev/pts/nºofFirstTerminal
để chúng được liên kết
Chúc mừng! Cả hai thiết bị đầu cuối xuất và nhận cùng một thứ. Cần một phần ba? Vâng, bạn đã nghiên cứu kết hợp? Bạn sẽ cần 6 script -f
lệnh. Thậm chí nhiều tty? Sớm...
screen
hoặctmux
trước khi bắt đầu một lệnh mà bạn có thể muốn truy cập từ thiết bị đầu cuối khác .