我通过输入命令“firefox”从 bash 窗口启动 Firefox,
它在用户界面中启动了 Firefox 浏览器。
当我通过输入“ps”命令检查 Firefox 进程时,我发现 Firefox 进程附加了一个控制终端(pts12 / 从上面的屏幕截图中可以看出),并且 Firefox 进程也将 bash 作为父进程。
现在,我如何能够直接向 Firefox 浏览器窗口提供键盘输入? (我在浏览器中输入了“Hello world”)
由于 tty 附加到进程,因此 Firefox 的输入应该通过终端窗口,对吗?
我知道这里涉及到一种叫做 X-11 的东西,但无法了解全貌
提出这个问题时将以下内容作为基础,但没有提供有关上述查询的足够信息, 键盘输入和文本输出如何工作?
答案1
X11 应用程序的输入不通过 tty 设备,而是作为 X11 事件提供。 X11服务器接收输入事件,判断当前哪个应用程序获得焦点,并将输入事件转换为相应的X11事件。
X11 服务器为系统中的硬件提供了抽象。 X11 应用程序作为服务器的客户端运行,并从服务器接收事件。甚至可以远程接收事件,IE您可以在本地系统上运行 X11 服务器,并使用它与另一个系统上运行的 X11 应用程序进行交互。
您可以通过运行看到这种情况的发生xev
,如中所述键盘输入和文本输出如何工作?
答案2
正如另一个答案和评论中提到的,但我尝试在这里说得更清楚。
标准输入、标准输出、标准错误tty
s 是原始 Unix 中存在的一个概念,并且至今仍被广泛使用:ls
、cat
grep
、 等。
X11、键盘焦点、窗口(程序视图,而不是 20 世纪 80 年代的操作系统)是另一个:firefox
、konsole
、 等。
它们可以一起工作,例如,虚拟终端既是 X11 程序,又提供 tty(伪 tty)。
首先分别学习两者。
- 什么是 stdin、stdout、stderr、什么是管道、文件重定向等。
- 什么是 X11、窗口管理器、窗口、键盘焦点等?
- 然后如果你需要它,伪
tty
s。