Запуск приложений Ubuntu Touch в командной строке для отладки GDB?

Я уже видел некоторые ответы, связанные с этим, но они не привели меня к окончательному ответу, поэтому я собираюсь попробовать еще раз.

По сути, мой вопрос: как я могу запускать приложения Ubuntu Touch из командной строки, в частности, чтобы я мог отлаживать их с помощью gdb?


Подробнее:

Во-первых, это означает, что я хотел бы запустить их с удаленного подключения к устройству (телефон / планшет) на ПК, либо из adb shell, либо phablet-shell (см. Взлом Ubuntu Touch. , Часть 5: adb shell против phablet-shell ). Я уже получил приложение Terminal , но - учитывая, что невозможно установить правильное (VNC) подключение к удаленному рабочему столу системы Ubuntu Touch , - оно мне мало пригодится, так как Я не могу по-настоящему работать с ним (пока еще не пробовал Bluetooth-клавиатуру, подключенную к устройству).

Во-вторых, я хотел бы, если возможно, запускать приложения на переднем плане; затем при вызове из командной строки терминала я ожидаю, что приложения будут выгружать свои распечатки стандартного вывода в терминал. Таким образом, рекомендация в Ubuntu Touch: Как мне запустить приложение Ubuntu Touch из терминала? Я не могу много использовать, поскольку (это из BQ E5 (Ubuntu 15.04, OTA-10.1)):

phablet@ubuntu-phablet:~$ ubuntu-app-list
ubuntu-system-settings
com.ubuntu.calculator_calculator_2.0.233
phablet@ubuntu-phablet:~$ ubuntu-app-launch com.ubuntu.calculator_calculator_2.0.233
phablet@ubuntu-phablet:~$ 

... он просто запускает приложение в фоновом режиме и сразу же завершает работу. А AFAICS, webapp-container просто открывает URL в браузере, не запускает произвольные приложения.

Некоторые из предустановленных приложений, очевидно, выполняются программой qmlscene, как Как мне просто запустить приложение Ubuntu Touch из терминала? отмечает; но даже принятый там ответ не применим к Ubuntu 15.04 Touch как есть:

$ /usr/bin/qmlscene \
> --desktop_file_hint=/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/applications/ubuntu-clock-app.desktop \
> /usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/qml/ubuntu-clock-app.qml
Loading module: 'libubuntu_application_api_touch_mirclient.so.3.0.0'
file:///usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/qml/ubuntu-clock-app.qml:22 module "Alarm" is not installed
file:///usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/qml/ubuntu-clock-app.qml:20 module "WorldClock" is not installed

... и приложение закрывается на устройстве только после запуска. И ниже приведена единственная командная строка, которую я нашел для работы на BQ E5 Ubuntu 15.04:

APP_ID=com.ubuntu.clock_clock_3.7.456 \
QML2_IMPORT_PATH=/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/lib/arm-linux-gnueabihf \
QML_IMPORT_TRACE=1 \
/usr/bin/qmlscene \
--desktop_file_hint=/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/applications/ubuntu-clock-app.desktop \
/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/qml/ubuntu-clock-app.qml

Затем приложение запускается на телефоне, в то время как сообщения на терминале оболочки сбрасываются, например:

Loading module: 'libubuntu_application_api_touch_mirclient.so.3.0.0'
QQmlImportDatabase::addImportPath: "/usr/lib/arm-linux-gnueabihf/qt5/qml"
QQmlImportDatabase::addImportPath: "/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/lib/arm-linux-gnueabihf"
QQmlImportDatabase::addImportPath: "/usr/lib/arm-linux-gnueabihf/qt5/bin"
...

... и после нажатия Ctrl-C в терминале приложение завершается.

Почему мне это нравится, для одного я знаю, что такое распечатка приложения и как перенаправить / сохранить его, а для другого я знаю, как построить командную строку gdb для отладки. Мне удалось перевести устройство в режим записи и из оболочки установить build-essential (см. Рекомендуемый способ установки обычных (cli) .deb пакетов на Ubuntu Phone? ), который загружается в gdb, так что теперь он доступен в оболочке также в режиме только для чтения. Тогда я могу сделать:

APP_ID=com.ubuntu.clock_clock_3.7.456 \
QML2_IMPORT_PATH=/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/lib/arm-linux-gnueabihf \
QML_IMPORT_TRACE=1 \
gdb --args \
/usr/bin/qmlscene \
--desktop_file_hint=/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/applications/ubuntu-clock-app.desktop \
/usr/share/click/preinstalled/com.ubuntu.clock/3.7.456/share/qml/ubuntu-clock-app.qml

... который будет правильно открываться gdb:

GNU gdb (Ubuntu 7.9-1ubuntu1) 7.9
...
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/qmlscene...(no debugging symbols found)...done.

(но в этом примере он не будет так полезен из-за отсутствия символы отладки).

Однако, помимо этих приложений, запущенных qmlscene, на Ubuntu Touch 15.03, по-видимому, есть и «правильные» исполняемые файлы, такие как приложение Browser:

phablet@ubuntu-phablet:~$ which webbrowser-app
/usr/bin/webbrowser-app
phablet@ubuntu-phablet:~$ file /usr/bin/webbrowser-app
/usr/bin/webbrowser-app: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=c173774045b98a97e831eda92dd5008d08b9a251, stripped

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

APP_ID=webbrowser-app \
UNITY_MIR_SOCKET=/run/mir_socket \
MIR_SOCKET=/var/run/mir_socket \
MIR_SERVER_PROMPT_FILE=1 \
MIR_SERVER_NAME=session-0 \
/usr/bin/webbrowser-app \
--desktop_file_hint=/usr/share/applications/webbrowser-app.desktop

... который, однако, сразу завершается неудачно в терминале с:

Loading module: 'libubuntu_application_api_touch_mirclient.so.3.0.0'
UbuntuClientIntegration: connection to Mir server failed. Check that a Mir server is
running, and the correct socket is being used and is accessible. The shell may have
rejected the incoming connection, so check its log file
Aborted

Более того, вся эта работа с --desktop_file_hint кажется чем-то необходимым для Unity8 (т. е. Unity8 может проверять командную строку приложения и искать ее, даже если приложение сама не использует его) - но может быть (или уходит):

ubuntu-bugs - [Bug 1578319] [NEW] Некоторые тесты AP ubuntu-ui-toolkit не запускаются - отклонено unity8, как при использовании desktop_file_hint (2016-05)

... не использует upstart-app-launch - что объясняет ошибку. desktop_file_hint не является поддерживаемым средством запуска приложения (и может уйти в любое время), поэтому UITK должен перейти на использование UAL в своих тестах AP.

Это действительно раньше работало до недавнего времени, но недавний рефакторинг нарушил поведение desktop_file_hint. Поскольку это не поддерживаемое поведение, на него следует полагаться, поэтому было бы лучше исправить UITK, чем восстановить старое поведение.

Хорошо, но тогда, как мне запустить исполняемые файлы, возможно из неустановленных приложений, с upstart-app-launch (т. Е. ubuntu-app-launch) - и как бы я запустил их на переднем плане в терминале? Я знаю, что, как и в Android ndk-gdb, в Ubuntu SDK есть нечто подобное через Qt Creator , который, очевидно, использует gdbserver на устройстве. Однако я предпочел бы не запускать графический интерфейс для чего-то подобного - и на самом деле, я бы хотел запустить gdb старомодным способом, как описано выше, с исполняемым файлом в качестве аргумента в командной строке.

Я полагаю, что во многом это связано с тем, что я не совсем понимаю различия между init / Upstart, X11 / Mir, Gnome / Unity и т. Д., Которые применимы к устройству по сравнению с (классическим) рабочим столом - и я не могу точно сказать, что работает что. Мне бы хотелось, чтобы это было достаточно объяснено, поэтому я могу понять, как будут работать приложения (GUI) Ubuntu Touch из командной строки терминала.

1
задан 13 April 2017 в 15:23

2 ответа

Ну, я думаю, что нашел что-то, что объясняет некоторые вещи, я задавался вопросом о - но я буду все еще любить за кого-то отправлять надлежащий образованный ответ, таким образом, я не соберусь принимать этого на данный момент...

Так или иначе, ресурс:

Ошибка № 1367871 “ubuntu-app-launch не передает аргументы executable”: Ошибки: Средство запуска Приложения Ubuntu
https://bugs.launchpad.net/ubuntu-app-launch / + ошибка/1367871

UAL не разработана для выполнения пользовательских двоичных файлов, как когда-либо Вы хотели бы, она разработана для запуска приложений. Приложение определяется с набором различных метаданных, но один из ключевых является файлом на рабочем столе. Тот файл определяет, как запустить приложение и - то, что UAL решает использовать для того, как запустить его. Таким образом приложение может быть запущено последовательным способом и является тем же самым с устройства на устройство. [...]

хитрая вещь о заключении приложения, то, что параметры командной строки и переменные среды не являются действительно хорошим соединением для него. "Приложение" является абсолютно отдельным от остальной части системы в мире пакета щелчка. Существуют некоторые рычаги в щелчке для установки символьных ссылок или такого, для других частей системы, чтобы смочь легко найти те приложения, такие как запуск приложения человечности и объем приложений. Но они не приложения командной строки, и Вы не можете просто просто выполнить их из командной строки с произвольной конфигурацией.

0
ответ дан 14 April 2017 в 01:23
  • 1
    Спасибо за обходное решение. It' s подобный одной из моих реализаций с помощью processID nautilaus $tempdir -n --no-default-window --no-desktop &, который в конечном счете возвратится, но не сразу. I' ll добавляют его к моему вопросу для получения дополнительной информации того, как далеко я добрался. Не могло бы быть способа на самом деле распознать, что окно закрылось. Но если это, I' m надеющийся сохранить дополнительные шаги возвращения к сценарию. В настоящее время, I' m пытающийся использовать оснащает такой в соответствии с Jacob Vlijm для проверки, когда окно закрылось. – L. D. James 15 October 2017 в 23:36

Я выполняю Lubuntu, и я нахожу, что они хорошо работают от удаленной оболочки, запущенной с ssh-Y user@linuxbox:

ubuntu-app-launch "qterminal"    
qterminal

первые запуски qterminal в Кварце и не должны спрашивать мой пароль, второе также запускает qterminal, но нуждается в пароле

, я думаю, что первое также выполняет удар. Вы попытались работать lxsession? Хотя это неприменимо, я получаю эту странную новую Корзину и Единицу установщик Linux, появляющийся странно.

enter image description here

0
ответ дан 29 September 2019 в 16:49

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

Похожие вопросы: