GTK: Как игнорировать ошибки «не могу открыть дисплей»? - PullRequest
1 голос
/ 19 июля 2010

Я написал несколько GTK-программ, использующих привязки gtkD для языка программирования D, которые в противном случае являются консольными приложениями, но способны отображать графики на экране и сохранять их в файл.Я хотел бы запустить их на компьютере, к которому у меня есть только SSH-доступ с консоли, что означает, что графики не будут отображаться на экране, а будут записываться в файлы.

Когда я вызываю Main.init (), я получаю Gtk-WARNING **: не могу открыть дисплей, как и ожидалось.Когда я вместо этого вызываю Main.initCheck () и игнорирую ошибки, я просто получаю больше ошибок позже, связанных с отсутствием экрана.

Есть ли какой-нибудь простой способ заставить мою программу игнорировать тот факт, что экран недоступен, делать все его экранные рисунки на каком-то фиктивном устройстве (графический эквивалент / dev / null) и все же фактически рисовать вPixmaps и Pixbufs (необходимые для сохранения графиков в файлах) и запуска не основанных на графическом интерфейсе частей приложения?

Редактирование: В случаях, когда приложение запускает окно и блокирует цикл обработки событий, идеальная вещьдля этого нужно было бы немедленно закрыть окно (или не открыть его в первую очередь) и продолжить запуск частей программы, не основанных на графическом интерфейсе.Если это невозможно, я могу обойти это, убедившись, что я не запускаю никаких окон.

Кроме того, похоже, что Pixbufs и Pixmaps не работают без экрана.Я пытался рисовать в Pixmap, создавая из этого Pixbuf и сохраняя результаты в файл, либо после вызова Main.checkInit () и игнорирования ошибок, либо без оператора init, либо GTK жалуется на отсутствие экрана.

Ответы [ 2 ]

1 голос
/ 19 июля 2010

Я считаю, что самое простое решение - использовать только GdkPixbuf s для обработки ваших графиков; Насколько я знаю, библиотека gdk-pixbuf работает только с pixbufs в памяти и не нуждается в оконной системе. Держите обработку и отображение частей вашего кода строго разделенными. Если вы делаете это, не должно иметь значения, что нет экрана. Вы даже можете сделать параметр командной строки, чтобы отключить рисование на экране.

Вы также можете использовать GtkOffscreenWindow, но это доступно только после GTK 2.20, и, насколько я могу судить, привязки D охватывают только до 2,18.

В качестве альтернативы, вы можете использовать перенаправление X в вашем сеансе SSH; используйте -X или -Y в командной строке SSH. Смотрите руководство по SSH для получения дополнительной информации. Если вы используете X-сервер на компьютере, с которого вы работаете по SSH, графики могут отображаться на экране вашего локального компьютера.

0 голосов
/ 20 июля 2010

Pixmaps не будут работать без сервера - они по определению (в терминологии X) являются ресурсами изображений, хранящимися на X сервере.Однако Pixbuf хранятся в клиентском приложении и должны работать без X.

Если вам нужны Pixmaps, но вы не хотите графику, у вас есть два варианта:

  1. ВключитьSSH X туннелирование, передавая флаг -X.В этом случае ваше приложение сможет использовать локальный X-сервер.
  2. Использовать Xvfb - это фиктивный X-сервер, который вообще не выводит данные, а вся графика сохраняется в памяти.
...