为什么伪终端从/dev/pts/{number}
(并且)X-session 推断击键/dev/input/by-id/{keyboard-device-name}
?
我知道伪终端在 X 会话之上运行。
为什么伪终端如此特殊,它有一个单独的文件位置来读取/写入随后将显示在 UI 终端视图中的数据?
内核如何知道伪终端和其他应用程序之间的区别,从而写入两个不同的文件位置?
答案1
为什么伪终端如此特殊,它有一个单独的文件位置来读取/写入随后将显示在 UI 终端视图中的数据?
因为桌面上的用户输入有两种根本不同的视图。
显示服务器(X11 或 Wayland 合成器)处理全部来自硬件的输入,通过/dev/input/...
(libinput
至少在使用时)。 X11和Wayland客户端通过各自的协议接收相应的事件。
不是 X11 和 Wayland 客户端但需要接收输入的程序是使用某种形式的模拟运行的。终端模拟器就是这样一种模拟:顾名思义,它模拟一个终端,并在这方面得到了帮助伪终端其中涉及/dev/pts/...
设备。
因此,当您在终端模拟器中运行程序时,您的击键遵循以下路径:
键盘→内核→显示服务器→终端仿真器(作为高级事件)→伪终端→程序
这为最终程序提供了一种错觉,即它正在运行,其输入(和输出)连接到终端。
内核如何知道伪终端和其他应用程序之间的区别,从而写入两个不同的文件位置?
它不知道应用程序以及它们从哪里接收输入。它了解键盘并通过输入设备提供事件;另外,它知道伪终端,并允许控制程序通过它们传输事件。