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-terminal
thì 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/ptmx
và 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/pts
hoặc /dev
cho 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/pts
hiệ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 socat
hoặ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ì socat
có. 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 !!!