Программно перейти на tty из встроенного приложения qt, работающего на QWS framebuffer?

Мне интересно, как программно перейти на один из доступных терминалов из встроенного приложения 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
  • Buildroot 2011.11
  • Busybox 1.19
  • uClibc 2.21

Я подозреваю, но не уверен, что причина того, что ctrl+alt+fX не работает в первую очередь, может быть причиной того, что изменение tty не работает программно согласно chvt.

Я должен указать на этом этапе, что, запутанно, клавиши zap (ctrl + alt + backspace) работают как положено.

0 ответов

Другие вопросы по тегам