組み込みの Qt アプリケーションから利用可能な端末の 1 つにプログラムで変更する方法を知りたいです。
アプリケーションは を介して呼び出されますapplication -qws
。グラフィック的には、tty ドライバーが有効になっている Linux フレームバッファー (カーネルにコンパイルされたサポート) で構成されています。
これをプログラムで行う理由は、Ctrl+Alt+FX が tty の切り替えに機能しないためです。
まず、明らかな不正行為メカニズムを試してみました -keyPressEvent
残念system("chvt 2");
ながら、これは機能しませんでした。
代わりに、chvt.c
in 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が機能しない原因が、chvtに従ってプログラムでttyの変更が機能しない原因である可能性があると思いますが、確かではありません。
この段階で、紛らわしいことに、Zap キー (ctrl+alt+backspace) が期待どおりに機能することを指摘しておく必要があります。