В настоящее время у меня возникают трудности с очень простым приложением запуска, которое предназначено для отображения веб-страницы и имеет несколько кнопок для запуска игры. Когда вы щелкаете ссылку внутри панели запуска, она просто запускает веб-браузер по умолчанию со ссылкой, а не принимает и обрабатывает запросы навигации.
Однако при запуске через Steam ссылки не открываются в новом веб-браузере. Точное поведение зависит от среды, у меня были отчеты о зависании копий gvfs-open
и xdg-open
, хотя в моей среде он просто указывает мышью, что firefox открывается на долю секунды и ничего не делает (включая процессы, запущенные вообще в соответствии с strace , возможно, имеет какое-то отношение к системе передачи сообщений KDE, я не знаю). К сожалению, есть также сообщения о том, что он работает нормально. И поэтому у меня возникла проблема с определением точной проблемы в результате.
Мне удалось сузить круг проблем до изменения Steam LD_LIBARRY_PATH исполняемого файла для использования платформ Steam Linux. Я связал все библиотеки, необходимые лаунчеру, с лаунчером.
Вот минимальное воспроизводимое руководство:
main.cpp
#include <QApplication>
#include <QWebFrame>
#include <QDesktopServices>
#include <QNetworkRequest>
#include <QMessageBox>
#include <QWebView>
class WebPage : public QWebPage {
public:
bool acceptNavigationRequest(QWebFrame*, const QNetworkRequest &request, NavigationType) {
QDesktopServices::openUrl(request.url());
return false;
}
};
class WebView : public QWebView {
public:
QWebView* createWindow(QWebPage::WebWindowType) {
WebView* res = new WebView;
WebPage* page = new WebPage;
res->setPage(page);
return res;
}
};
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
WebView v;
v.load(QUrl("http://example.com/"));
v.show();
return a.exec();
}
лаунчер.про
QT += core gui network webkitwidgets widgets
TARGET = launcher
TEMPLATE = app
SOURCES = main.cpp
Вам также потребуется скопировать и связать следующие библиотеки (стандартное развертывание Qt):
libQt5Widgets.so libQt5Gui.so libQt5Core.so libQt5Network.so libQt5WebKitWidgets.so libQt5WebKit.so libQt5MultimediaWidgets.so libQt5OpenGL.so libQt5PrintSupport.so libQt5Multimedia.so libQt5Sensors.so libQt5Quick.so libQt5Qml.so libQt5Sql.so libQt5Positioning.so libQt5DBus.so libicui18n. так libicuuc.so libicudata.so libssl.so libcrypto.so libstdc++.so libgcc_s.so
И в подкаталоге под названием платформы:
libqxcb.so
И, наконец, скрипт, чтобы связать это вместе:
launch_launcher.sh
#!/bin/sh -e
cd "$(dirname "$0")"
LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./launcher
Наконец, установите Steam и установите его LD_LIBRARY_PATH как свой собственный, экспортируйте его и запустите launch_launcher.sh (эти точные пути зависят от вашей установки Steam).
По сути, если убрать $LD_LIBRARY_PATH
из скрипта launch_launcher, чтобы в строке читалось только LD_LIBRARY_PATH=. ./launcher
, то ссылки работают. Однако при включенном $LD_LIBRARY_PATH
ссылки не работают. Нам нужно, чтобы $LD_LIBRARY_PATH
работало, чтобы использовать библиотеки платформы Steam Linux (что позволяет игре работать).
Каков наилучший способ устранения этой проблемы? Как я могу найти ответственную библиотеку и исключить ее или иным образом обойти эту проблему?
echo $LD_LIBRARY_PATH # sample-output: .:A:B:C:D:E
модифицированный скрипт запуска:LD_LIBRARY_PATH=.:A:B:C ./launcher
- person Fox   schedule 20.03.2015LD_LIBRARY_PATH
- это то, что Steam устанавливает. Обычно это довольно долго и отличается от системы к системе и от пользователя к пользователю (поскольку Steam устанавливает себя под~/.steam/
). Простое изменениеLD_LIBRARY_PATH
не поможет, потому что мне нужен полный Steam, предоставленныйLD_LIBRARY_PATH
для игры, но Steam предоставилLD_LIBRARY_PATH
также, кажется, мешаетQDesktopServices
. Так что дело не в том, чтобы найти правильныйLD_LIBRARY_PATH
, потому что его, кажется, не существует. - person OmnipotentEntity   schedule 20.03.2015