Có thể mở một thiết bị đầu cuối với tty / pty được chỉ định


9

(Tôi đang sử dụng Ubuntu.) Theo hiểu biết của tôi, tty chỉ là một loại cổng. Bạn nhập một cái gì đó và nó sẽ xuất ra một cái gì đó. Và một thiết bị đầu cuối (trình giả lập) là một phần mềm xử lý các đầu vào và đầu ra. Nghĩa đen có thể chọn cổng nào để kết nối.

Tôi đã thấy rất nhiều tệp tty trong / dev và rất nhiều tệp pts trong / dev / pts / Tôi không biết tại sao có rất nhiều trong số chúng. Có phải tất cả chúng đang được sử dụng?

Nếu không, tôi có thể bắt đầu một thiết bị đầu cuối với pty được chỉ định không?

ví dụ gnome-terminal /dev/pts/47

Cập nhật

Lý do tôi làm điều này là tôi muốn có một thiết bị đầu cuối từ xa. Tôi biết cách tiếp cận phù hợp là sử dụng ssh hoặc telnet.

Nhưng để truy cập tạm thời, nó không phải là rất thuận tiện. Tôi muốn sử dụng socat để chuyển tiếp một tty hoặc pty cho khách hàng. Sau đó, khách hàng có thể bắt đầu một thiết bị đầu cuối với pty hoặc tty đó.

Các mã sau hoạt động tốt. Nó được thực thi trên máy khách và ở phía máy chủ, tôi nhận được "xin chào".

echo "hello" > /home/myhomefoler/pty_created_by_socat

Câu trả lời:


9

Trên UNIX, một tty (giống như nhiều thứ khác) xuất hiện dưới dạng một tệp. Dữ liệu được ghi vào thiết bị tty đi đến thiết bị đầu cuối và dữ liệu đến từ thiết bị đầu cuối có sẵn để đọc trên tty.

Nếu tty là một cổng nối tiếp phần cứng, thì dữ liệu được ghi vào nó sẽ được gửi trên dây và dữ liệu đến từ dây xuất hiện trên tty.

Nếu tty là bảng điều khiển video của máy thì dữ liệu được ghi trên màn hình sẽ được hiển thị trên màn hình và dữ liệu đến từ bàn phím sẽ xuất hiện trên tty.

Nếu tty là giả (thiết bị đầu cuối ảo) được kết nối với trình giả lập thiết bị đầu cuối X, gnome-terminalthì dữ liệu được ghi vào nó sẽ được gửi đến phần mềm giả lập thiết bị đầu cuối X và lần lượt được hiển thị trong một cửa sổ, trong khi dữ liệu được nhập vào cửa sổ đó có sẵn để đọc trên thiết bị đầu cuối ảo. Phần mềm được cho là được kết nối với đầu "chính" của thiết bị đầu cuối giả. Thiết bị đầu cuối thực không có kết thúc "chính" vì có một thiết bị thực đằng sau chúng (như cổng nối tiếp), không phải là thiết bị ảo được triển khai bởi một phần mềm.

Vì vậy, bạn có thể thấy rằng sẽ không có ý nghĩa gì khi yêu cầu trình giả lập thiết bị đầu cuối X hoạt động trên một thiết bị tty tùy ý, chẳng hạn như /dev/ttyS0(một cổng nối tiếp thực, trên Linux). Nó phải là một giả giả.

Nhưng trình giả lập thiết bị đầu cuối có thể chọn ID số của thiết bị đầu cuối giả mà nó sử dụng không? Về nguyên tắc, hạt nhân có thể cho phép điều này, nhưng trên thực tế, giao diện kernel để phân bổ một thiết bị đầu cuối giả mới không hỗ trợ nó: kernel tạo ra sự lựa chọn riêng. (Trong mô hình pesudo-terminal của SysV được tạo bằng cách mở một thiết bị đặc biệt được gọi /dev/ptmxvà thiết bị đầu cuối giả có sẵn được đánh số thấp nhất được tự động phân bổ.)

Nhưng: tại sao bạn cần chọn số thiết bị đầu cuối giả được phân bổ? Nhân chọn một cái chưa sử dụng được đảm bảo có sẵn và có thể sử dụng được. Bạn có lý do tại sao bạn thích nếu nó chọn một cái khác không?

Đối với bạn câu hỏi khác:

Tôi đã thấy rất nhiều tệp tty trong / dev và rất nhiều tệp pts trong / dev / pts / Tôi không biết tại sao có rất nhiều trong số chúng. Có phải tất cả chúng đang được sử dụng?

Nó phụ thuộc vào hệ thống. Trên một số hệ thống, tất cả các thiết bị đầu cuối giả có thể được tạo trước trong /dev/ptshoặc /devcho dù chúng có được sử dụng hay không. Mặt khác, các nút thiết bị chỉ tồn tại nếu thiết bị đầu cuối giả đang được sử dụng. Bạn nói rằng bạn đang sử dụng Ununbu, sử dụng Linux, là loại thứ hai. Vì vậy, vâng, tất cả các nút thiết bị bạn thấy /dev/ptshiện đang được sử dụng.

Nhưng để truy cập tạm thời, nó không phải là rất thuận tiện. Tôi muốn sử dụng socat để chuyển tiếp một tty hoặc pty cho khách hàng. Sau đó, khách hàng có thể bắt đầu một thiết bị đầu cuối với pty hoặc tty đó.

Nếu bạn muốn socathoặc bất kỳ phần mềm nào khác kết nối với đầu cuối chính của thiết bị đầu cuối giả, thì bạn cần phần mềm đó để hỗ trợ cụ thể cho việc đó. Nhưng bạn may mắn vì socatcó. Ví dụ: nếu tôi chạy:

socat PTY,link=/tmp/socat.pty TCP-LISTEN:2222 &
sleep 1 && ( setsid bash ) </tmp/socat.pty >/tmp/socat.pty 2>&1

Tôi có thể lấy shell bằng cách kết nối với cổng 2222 từ một nơi khác. Rất nguy hiểm từ quan điểm an ninh !!!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.