QXcbConnection: не удалось подключиться к дисплею при удаленной отладке программы с Qt5 - PullRequest
0 голосов
/ 11 июня 2018
  • ПК: Debian 9.4.0, x64, ip 192.168.1.10
  • Qt: Qt Creator 4.6.1 На основе Qt5.11.0
  • BeagleBone Black: Debian 9.3.0, armv7, ip 192.168.1.20

Я кросс-скомпилировал приложение GUI для BeagleBone Black на моем ПК и смог успешно выполнить его на своем BeagleBone.
Но когда я удаленно отлаживал приложениес F5 (Меню: Отладка-> Начать отладку) я сталкиваюсь с проблемой следующим образом.

QXcbConnection: не удается подключиться к дисплею

Приложение падает в главном () в строке:

QApplication a(argc, argv);
  1. Ниже приведены подробности при компиляции и отладке:

подробности отладки :

Checking available ports...
Found 101 free ports.
Starting gdbserver...
Debugging starts

Listening on port 10001
Remote debugging from host 192.168.1.10
Process /home/debian/gdb/armtest3 created; pid = 13981
Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
Could not load shared library symbols for 25 libraries, e.g. /usr/lib/arm-linux-gnueabihf/libQt5Widgets.so.5.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
-----------------armtest3 start------------
QXcbConnection: Could not connect to display

скомпилировать вывод :

09:31:33: Running steps for project armtest3...
09:31:33: Configuration unchanged, skipping qmake step.
09:31:33: Starting: "/usr/bin/make" 
make: Nothing to be done for 'first'.
09:31:33: The process "/usr/bin/make" exited normally.
09:31:33: The remote file system has 218 megabytes of free space, going ahead.
09:31:33: Deploy step finished.
09:31:33: Trying to kill "/home/debian/gdb/armtest3" on remote device...
09:31:37: Remote application killed.
09:31:37: Deploy step finished.
09:31:37: No deployment action necessary. Skipping.
09:31:37: Deploy step finished.
09:31:37: Elapsed time: 00:04.

Ниже приведены мои BeagleBone Kit:
Конфигурация BeagleBone Kit

main.c

main.c

#include "mainwindow.h"
#include <QApplication>
#include <iostream>
#include <QDateTime>
#include <QDebug>
using namespace std;

int main(int argc, char *argv[])
{
    cout << "-----------------armtest3 start------------" << endl;
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}  

Соответствующий вопрос: QXcbConnection: Не удалось подключиться к дисплею при попытке отладки приложения Linux с Qt Creator

1 Ответ

0 голосов
/ 12 июня 2018

Когда вы развертываете свое приложение и запускаете его из системы X11 на самом устройстве, вы обнаруживаете, что оно работает, потому что здесь у него есть доступ к переменной окружения DISPLAY, которая (кратко говоря) сообщает ему, где отображать себя.Эта переменная среды была дополнительно установлена ​​в дереве процессов в сеансе X.

Когда вы запускаете программу через отладчик, Qt Creator подключается к удаленному устройству (через ваши настройки в Инструменты> Параметры> Устройства ) и запуск программы через ssh.В этом контексте ваша программа больше не знает, где отображать себя, поскольку, очевидно, она не может отображаться в ssh.В указанной вами линии происходит сбой, потому что именно здесь подсистема XCB пытается определить, к какому X-серверу подключиться для этой цели.

Итак, чтобы ответить на ваш вопрос: вам необходимовручную введите переменную окружения DISPLAY при удаленной отладке.

Простой способ проверить это - перейти в Projects Mode , найти комплект, который вы используете для сборки для удаленного устройства,и выберите настройки Run .При этом вы должны найти раздел Run Environment .Здесь вы можете добавить новую переменную с именем DISPLAY и установить ее значение в качестве идентификатора дисплея, на котором вы работаете (я предполагаю, что вам понадобится :0.0, указывающий первый доступный экран на локальном хосте, хотя вы должны прочитатьо переменной DISPLAY, например, здесь или здесь ).

Более долгосрочным, потенциально лучшим решением было бы установить ту же переменную в настройках вашего набора ( Инструменты> Параметры> Построить и запустить> Наборы> Среда ).Это будет применяться к будущим программам, которые вы создадите с помощью этого.

...