3

我想知道如何以编程方式从嵌入式 Qt 应用程序更改为可用终端之一。

该应用程序通过 调用application -qws。从图形上看,它配置了 Linux 帧缓冲区(支持编译到内核中)并启用了 tty 驱动程序。

以编程方式执行此操作的原因是 Ctrl+Alt+FX 无法切换 ttys。

首先,我尝试了明显的作弊机制 -keyPressEvent我添加了覆盖system("chvt 2");不幸的是,这不起作用。

相反,我直接查看了chvt.c在busybox中的来源。从本质上讲,这归结为:

fd = open("/dev/console", O_RDRW);
ioctl(fd, VT_ACTIVATE, vt_num);
ioctl(fd, VT_WAITACTIVE, vt_num);

忽略使用xioctl和检测正确的 tty - 我知道/dev/console存在,我可以得到一个 RW 文件句柄。

再次,没有运气。

因此,chvt.c我决定迭代所有存在的帧缓冲设备,直到找到一个正在接收键盘输入的设备。然后我跑了

fd = open("/dev/fb1", O_RDRW);
ioctl(fd, VT_ACTIVATE, vt_num);
ioctl(fd, VT_WAITACTIVE, vt_num);

根据任何正常的 tty 更改,这都会导致黑屏,除了帧缓冲区设备随后返回,将我的应用程序带回来。

所以 - 我的问题 - 在不退出我的应用程序的情况下,我希望能够以编程方式切换到我选择的 tty,然后能够使用通常的 ctrl+alt+fX 机制切换回来。

环境:

  • Qt 4.7.4
  • Linux 3.3.3
  • 构建根 2011.11
  • 忙箱 1.19
  • uClibc 2.21

我怀疑但不确定,ctrl+alt+fX 最初不起作用的原因可能是 tty 更改无法按照 chvt 以编程方式工作的原因。

在这个阶段我应该指出,令人困惑的是,zap 键(ctrl+alt+backspace)确实按预期工作。

4

0 回答 0