是否可以用指定的tty / pty打开终端


9

(我正在使用Ubuntu。)据我了解,tty只是一种端口。您输入了一些内容,它应该输出一些内容。终端(仿真器)是处理这些输入和输出的软件。从字面上看,终端可以选择要连接到的端口。

我在/ dev中看到了很多tty文件,在/ dev / pts /中看到了很多pts文件,但我不知道为什么会有这么多。它们都被使用了吗?

如果没有,我可以启动指定pty的终端机吗?

例如 gnome-terminal /dev/pts/47

更新资料

我这样做的原因是我想要一个远程终端。我知道合适的方法是使用ssh或telnet。

但是对于临时访问,这不是很方便。我想使用socat将tty或pty转发给客户端。然后,客户可以使用该pty或tty启动终端。

以下代码可以正常工作。它在客户端和服务器端执行,我得到“你好”。

echo "hello" > /home/myhomefoler/pty_created_by_socat

Answers:


9

在UNIX上,tty(与许多其他事物一样)显示为文件。写入tty设备的数据进入终端,来自终端的数据可在tty上读取。

如果tty是硬件串行端口,则写入其中的数据将通过电线发送,并且来自电线的数据将显示在tty上。

如果tty是机器的视频控制台,则写入它的数据将显示在屏幕上,而来自键盘的数据将显示在tty上。

如果tty是连接到X终端仿真器的伪tty(虚拟终端),例如,gnome-terminal写入其中的数据将传递到X终端仿真器软件,并依次显示在窗口中,而键入该窗口的数据可用在虚拟终端上阅读。据说该软件已连接到伪终端的“主”端。真实终端没有“主”端,因为在它们后面有真实设备(如串行端口),而不是由软件实现的虚拟设备。

因此,您已经看到,要求X终端仿真器在任意tty设备(例如/dev/ttyS0,Linux上的真实串行端口)上运行没有任何意义。它必须是伪tty。

但是终端仿真器可以选择它使用的伪终端设备的数字ID吗?原则上,内核可能允许这样做,但实际上,用于分配新伪终端的内核接口不支持它:内核自行选择。(在SysV模型中,/dev/ptmx伪终端是通过打开称为的特殊设备创建的,并且自动分配了编号最小的可用伪终端设备。)

但是:为什么需要选择要分配的伪终端设备的编号?内核会选择一个未使用的,保证可以使用。您是否有理由选择另一种选择呢?

至于您的其他问题:

我在/ dev中看到了很多tty文件,在/ dev / pts /中看到了很多pts文件,但我不知道为什么会有这么多。它们都被使用了吗?

这取决于系统。在某些系统上,无论是否使用,所有可能的伪终端设备都在/dev/pts或中预先创建/dev。在其他情况下,仅当使用伪终端时,设备节点才存在。您说您正在使用Ununbu,后者使用的是Linux。因此,是的,您/dev/pts当前看到的所有设备节点都在使用中。

但是对于临时访问,这不是很方便。我想使用socat将tty或pty转发给客户端。然后,客户可以使用该pty或tty启动终端。

如果您希望socat或任何其他软件连接到伪终端的主端,则需要该软件专门支持这样做。但是你很幸运,因为socat确实如此。例如,如果我运行:

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

我可以通过从其他地方连接到端口2222来获得外壳。从安全角度来看非常危险!!!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.