Running Ubuntu Touch applications in command line for gdb debugging?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
I have already seen some answers related to this, but they didn't bring me to a definitive answer, so I'm going to try again.
Basically, my question is: how can I run Ubuntu Touch applications from the command line - specifically, so that I could debug them with gdb
?
More details:
First, what that means is that I'd like to run them from a remote shell connection to a (phone/tablet) device on a PC, either from adb shell
or phablet-shell
(see Hacking Ubuntu Touch, Part 5: adb shell vs. phablet-shell). I already got the Terminal app, but - given that one cannot establish a proper (VNC) remote desktop connection to an Ubuntu Touch system, - it is of little use to me, as I cannot really work with it (haven't yet tried a Bluetooth keyboard attached to a device, though).
Second, I'd like, if possible, to run applications in the foreground; then when called from the terminal command line, I'd expect the applications to dump their stdout printouts to the terminal. Thus, the recommendation in Ubuntu Touch: How do I run an ubuntu touch app from the terminal? I cannot use much, since (this is from a 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:~$
... it simply launches the app in the background, and immediately exits. And AFAICS, webapp-container
simply opens an URL in the browser, doesn't run arbitrary applications.
Some of the preinstalled applications are apparently run by a program qmlscene
, as How do I simply run an ubuntu touch app from the terminal? notes; but even the accepted answer there isn't applicable to Ubuntu 15.04 Touch as-is:
$ /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
... and the application shuts down on device barely after being started. And below is the only command line I've found to work on a 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
The application then starts on phone, while on shell terminal messages are being dumped, like:
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"
...
... and after you press Ctrl-C in terminal, the application exits.
Why I like this, is for one, I know what is the application printout and how to redirect/save it - and for another, I know how to build a gdb
command line in order to debug. I managed to set the device in writable mode, and from the shell install build-essential
(see Recommended way to install regular(cli) .deb packages on Ubuntu Phone?), which pulls in gdb
, so now it is available in shell also in read-only mode. Then I can do:
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
... which will properly open 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.
(but won't be of that much use in this example due to missing debugging symbols).
However, besides these apps ran by qmlscene
, there are seemingly also "proper" executables on Ubuntu Touch 15.03, such as the Browser app:
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
... but this kind I simply cannot get to run from the command line. Closest I got to (by analogy with above, and copying some environment variables that env
ran on the Terminal app on the phone reported) is this:
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
... which however fails immediately in terminal with:
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
What's more, all this business with --desktop_file_hint
seems something required by Unity8 (i.e. Unity8 might inspect the app command line and look for it, even if the app itself doesn't use it) - but may be (or is) going away:
ubuntu-bugs - [Bug 1578319] [NEW] Some ubuntu-ui-toolkit AP tests failing to launch - rejected by unity8 as is using desktop_file_hint (2016-05)
...is not using upstart-app-launch - which would explain the fail.
desktop_file_hint is not a supported means of launching an app (and can
go away at any time), so UITK should change to use UAL in its AP tests.
This indeed used to work until recently, but a recent refactoring broke
the desktop_file_hint behaviour. Since it's not a supported behaviour,
it should be relied on, so it would be better to fix UITK than restore
the old behaviour.
Ok, but then, how do I run executable files, possibly from non installed applications, with upstart-app-launch
(i.e. ubuntu-app-launch
) - and how would I run them in foreground in the terminal? I'm aware that, - just like Android has ndk-gdb
, - the Ubuntu SDK has something similar via Qt Creator which apparently uses gdbserver
on the device. However, I'd prefer not firing up a GUI for something like that - and in fact, would love to run gdb
in the old-fashioned way, as described above, with an executable as argument on the command line.
I guess a lot of this has to do with me not quite understanding init/Upstart, X11/Mir, Gnome/Unity etc differences that are applicable on a device vs. a (classic) desktop - and I cannot really tell what runs what. I'd love to have enough of it explained, so I can understand how running (GUI) Ubuntu Touch apps from a terminal command line would work.
command-line ubuntu-touch application-development debugging
add a comment |
I have already seen some answers related to this, but they didn't bring me to a definitive answer, so I'm going to try again.
Basically, my question is: how can I run Ubuntu Touch applications from the command line - specifically, so that I could debug them with gdb
?
More details:
First, what that means is that I'd like to run them from a remote shell connection to a (phone/tablet) device on a PC, either from adb shell
or phablet-shell
(see Hacking Ubuntu Touch, Part 5: adb shell vs. phablet-shell). I already got the Terminal app, but - given that one cannot establish a proper (VNC) remote desktop connection to an Ubuntu Touch system, - it is of little use to me, as I cannot really work with it (haven't yet tried a Bluetooth keyboard attached to a device, though).
Second, I'd like, if possible, to run applications in the foreground; then when called from the terminal command line, I'd expect the applications to dump their stdout printouts to the terminal. Thus, the recommendation in Ubuntu Touch: How do I run an ubuntu touch app from the terminal? I cannot use much, since (this is from a 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:~$
... it simply launches the app in the background, and immediately exits. And AFAICS, webapp-container
simply opens an URL in the browser, doesn't run arbitrary applications.
Some of the preinstalled applications are apparently run by a program qmlscene
, as How do I simply run an ubuntu touch app from the terminal? notes; but even the accepted answer there isn't applicable to Ubuntu 15.04 Touch as-is:
$ /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
... and the application shuts down on device barely after being started. And below is the only command line I've found to work on a 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
The application then starts on phone, while on shell terminal messages are being dumped, like:
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"
...
... and after you press Ctrl-C in terminal, the application exits.
Why I like this, is for one, I know what is the application printout and how to redirect/save it - and for another, I know how to build a gdb
command line in order to debug. I managed to set the device in writable mode, and from the shell install build-essential
(see Recommended way to install regular(cli) .deb packages on Ubuntu Phone?), which pulls in gdb
, so now it is available in shell also in read-only mode. Then I can do:
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
... which will properly open 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.
(but won't be of that much use in this example due to missing debugging symbols).
However, besides these apps ran by qmlscene
, there are seemingly also "proper" executables on Ubuntu Touch 15.03, such as the Browser app:
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
... but this kind I simply cannot get to run from the command line. Closest I got to (by analogy with above, and copying some environment variables that env
ran on the Terminal app on the phone reported) is this:
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
... which however fails immediately in terminal with:
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
What's more, all this business with --desktop_file_hint
seems something required by Unity8 (i.e. Unity8 might inspect the app command line and look for it, even if the app itself doesn't use it) - but may be (or is) going away:
ubuntu-bugs - [Bug 1578319] [NEW] Some ubuntu-ui-toolkit AP tests failing to launch - rejected by unity8 as is using desktop_file_hint (2016-05)
...is not using upstart-app-launch - which would explain the fail.
desktop_file_hint is not a supported means of launching an app (and can
go away at any time), so UITK should change to use UAL in its AP tests.
This indeed used to work until recently, but a recent refactoring broke
the desktop_file_hint behaviour. Since it's not a supported behaviour,
it should be relied on, so it would be better to fix UITK than restore
the old behaviour.
Ok, but then, how do I run executable files, possibly from non installed applications, with upstart-app-launch
(i.e. ubuntu-app-launch
) - and how would I run them in foreground in the terminal? I'm aware that, - just like Android has ndk-gdb
, - the Ubuntu SDK has something similar via Qt Creator which apparently uses gdbserver
on the device. However, I'd prefer not firing up a GUI for something like that - and in fact, would love to run gdb
in the old-fashioned way, as described above, with an executable as argument on the command line.
I guess a lot of this has to do with me not quite understanding init/Upstart, X11/Mir, Gnome/Unity etc differences that are applicable on a device vs. a (classic) desktop - and I cannot really tell what runs what. I'd love to have enough of it explained, so I can understand how running (GUI) Ubuntu Touch apps from a terminal command line would work.
command-line ubuntu-touch application-development debugging
add a comment |
I have already seen some answers related to this, but they didn't bring me to a definitive answer, so I'm going to try again.
Basically, my question is: how can I run Ubuntu Touch applications from the command line - specifically, so that I could debug them with gdb
?
More details:
First, what that means is that I'd like to run them from a remote shell connection to a (phone/tablet) device on a PC, either from adb shell
or phablet-shell
(see Hacking Ubuntu Touch, Part 5: adb shell vs. phablet-shell). I already got the Terminal app, but - given that one cannot establish a proper (VNC) remote desktop connection to an Ubuntu Touch system, - it is of little use to me, as I cannot really work with it (haven't yet tried a Bluetooth keyboard attached to a device, though).
Second, I'd like, if possible, to run applications in the foreground; then when called from the terminal command line, I'd expect the applications to dump their stdout printouts to the terminal. Thus, the recommendation in Ubuntu Touch: How do I run an ubuntu touch app from the terminal? I cannot use much, since (this is from a 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:~$
... it simply launches the app in the background, and immediately exits. And AFAICS, webapp-container
simply opens an URL in the browser, doesn't run arbitrary applications.
Some of the preinstalled applications are apparently run by a program qmlscene
, as How do I simply run an ubuntu touch app from the terminal? notes; but even the accepted answer there isn't applicable to Ubuntu 15.04 Touch as-is:
$ /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
... and the application shuts down on device barely after being started. And below is the only command line I've found to work on a 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
The application then starts on phone, while on shell terminal messages are being dumped, like:
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"
...
... and after you press Ctrl-C in terminal, the application exits.
Why I like this, is for one, I know what is the application printout and how to redirect/save it - and for another, I know how to build a gdb
command line in order to debug. I managed to set the device in writable mode, and from the shell install build-essential
(see Recommended way to install regular(cli) .deb packages on Ubuntu Phone?), which pulls in gdb
, so now it is available in shell also in read-only mode. Then I can do:
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
... which will properly open 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.
(but won't be of that much use in this example due to missing debugging symbols).
However, besides these apps ran by qmlscene
, there are seemingly also "proper" executables on Ubuntu Touch 15.03, such as the Browser app:
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
... but this kind I simply cannot get to run from the command line. Closest I got to (by analogy with above, and copying some environment variables that env
ran on the Terminal app on the phone reported) is this:
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
... which however fails immediately in terminal with:
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
What's more, all this business with --desktop_file_hint
seems something required by Unity8 (i.e. Unity8 might inspect the app command line and look for it, even if the app itself doesn't use it) - but may be (or is) going away:
ubuntu-bugs - [Bug 1578319] [NEW] Some ubuntu-ui-toolkit AP tests failing to launch - rejected by unity8 as is using desktop_file_hint (2016-05)
...is not using upstart-app-launch - which would explain the fail.
desktop_file_hint is not a supported means of launching an app (and can
go away at any time), so UITK should change to use UAL in its AP tests.
This indeed used to work until recently, but a recent refactoring broke
the desktop_file_hint behaviour. Since it's not a supported behaviour,
it should be relied on, so it would be better to fix UITK than restore
the old behaviour.
Ok, but then, how do I run executable files, possibly from non installed applications, with upstart-app-launch
(i.e. ubuntu-app-launch
) - and how would I run them in foreground in the terminal? I'm aware that, - just like Android has ndk-gdb
, - the Ubuntu SDK has something similar via Qt Creator which apparently uses gdbserver
on the device. However, I'd prefer not firing up a GUI for something like that - and in fact, would love to run gdb
in the old-fashioned way, as described above, with an executable as argument on the command line.
I guess a lot of this has to do with me not quite understanding init/Upstart, X11/Mir, Gnome/Unity etc differences that are applicable on a device vs. a (classic) desktop - and I cannot really tell what runs what. I'd love to have enough of it explained, so I can understand how running (GUI) Ubuntu Touch apps from a terminal command line would work.
command-line ubuntu-touch application-development debugging
I have already seen some answers related to this, but they didn't bring me to a definitive answer, so I'm going to try again.
Basically, my question is: how can I run Ubuntu Touch applications from the command line - specifically, so that I could debug them with gdb
?
More details:
First, what that means is that I'd like to run them from a remote shell connection to a (phone/tablet) device on a PC, either from adb shell
or phablet-shell
(see Hacking Ubuntu Touch, Part 5: adb shell vs. phablet-shell). I already got the Terminal app, but - given that one cannot establish a proper (VNC) remote desktop connection to an Ubuntu Touch system, - it is of little use to me, as I cannot really work with it (haven't yet tried a Bluetooth keyboard attached to a device, though).
Second, I'd like, if possible, to run applications in the foreground; then when called from the terminal command line, I'd expect the applications to dump their stdout printouts to the terminal. Thus, the recommendation in Ubuntu Touch: How do I run an ubuntu touch app from the terminal? I cannot use much, since (this is from a 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:~$
... it simply launches the app in the background, and immediately exits. And AFAICS, webapp-container
simply opens an URL in the browser, doesn't run arbitrary applications.
Some of the preinstalled applications are apparently run by a program qmlscene
, as How do I simply run an ubuntu touch app from the terminal? notes; but even the accepted answer there isn't applicable to Ubuntu 15.04 Touch as-is:
$ /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
... and the application shuts down on device barely after being started. And below is the only command line I've found to work on a 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
The application then starts on phone, while on shell terminal messages are being dumped, like:
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"
...
... and after you press Ctrl-C in terminal, the application exits.
Why I like this, is for one, I know what is the application printout and how to redirect/save it - and for another, I know how to build a gdb
command line in order to debug. I managed to set the device in writable mode, and from the shell install build-essential
(see Recommended way to install regular(cli) .deb packages on Ubuntu Phone?), which pulls in gdb
, so now it is available in shell also in read-only mode. Then I can do:
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
... which will properly open 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.
(but won't be of that much use in this example due to missing debugging symbols).
However, besides these apps ran by qmlscene
, there are seemingly also "proper" executables on Ubuntu Touch 15.03, such as the Browser app:
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
... but this kind I simply cannot get to run from the command line. Closest I got to (by analogy with above, and copying some environment variables that env
ran on the Terminal app on the phone reported) is this:
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
... which however fails immediately in terminal with:
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
What's more, all this business with --desktop_file_hint
seems something required by Unity8 (i.e. Unity8 might inspect the app command line and look for it, even if the app itself doesn't use it) - but may be (or is) going away:
ubuntu-bugs - [Bug 1578319] [NEW] Some ubuntu-ui-toolkit AP tests failing to launch - rejected by unity8 as is using desktop_file_hint (2016-05)
...is not using upstart-app-launch - which would explain the fail.
desktop_file_hint is not a supported means of launching an app (and can
go away at any time), so UITK should change to use UAL in its AP tests.
This indeed used to work until recently, but a recent refactoring broke
the desktop_file_hint behaviour. Since it's not a supported behaviour,
it should be relied on, so it would be better to fix UITK than restore
the old behaviour.
Ok, but then, how do I run executable files, possibly from non installed applications, with upstart-app-launch
(i.e. ubuntu-app-launch
) - and how would I run them in foreground in the terminal? I'm aware that, - just like Android has ndk-gdb
, - the Ubuntu SDK has something similar via Qt Creator which apparently uses gdbserver
on the device. However, I'd prefer not firing up a GUI for something like that - and in fact, would love to run gdb
in the old-fashioned way, as described above, with an executable as argument on the command line.
I guess a lot of this has to do with me not quite understanding init/Upstart, X11/Mir, Gnome/Unity etc differences that are applicable on a device vs. a (classic) desktop - and I cannot really tell what runs what. I'd love to have enough of it explained, so I can understand how running (GUI) Ubuntu Touch apps from a terminal command line would work.
command-line ubuntu-touch application-development debugging
command-line ubuntu-touch application-development debugging
edited Apr 13 '17 at 12:23
Community♦
1
1
asked May 4 '16 at 20:29
sdbbssdbbs
5561420
5561420
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Well, I think I found something that explains some of the things I was wondering about - but I'd still love for someone to post a proper erudite answer, so I'm not going to accept this one for now...
Anyways, the resource is:
Bug #1367871 “ubuntu-app-launch doesn't pass arguments to the executable” : Bugs : Ubuntu Application Launcher
https://bugs.launchpad.net/ubuntu-app-launch/+bug/1367871
UAL isn't designed to run custom binaries how ever you'd like, it's designed to launch applications. An application is defined with a bunch of different metadata, but one of the key ones is a desktop file. That file defines how to launch the application and is what UAL decides to use for how to launch it. In this way the application can get launched in a consistent manner and is the same thing from device to device. [...]
The tricky thing about app confinement, is that command line arguments and environment variables aren't really a good mix for it. An "app" is completely separate from the rest of the system, in the click package world. There are some hooks in click to set up symlinks or such, for other parts of the system to be able to easily find those apps, such as ubuntu-app-launch and the apps scope. But they are not command line applications, and you can't simply just run them from the command line with arbitrary configuration.
add a comment |
I'm running Lubuntu, and I find that these work fine from a remote shell started with ssh -Y user@linuxbox:
ubuntu-app-launch "qterminal"
qterminal
The first launches qterminal in Quartz and doesn't need to ask my password
The second also launches qterminal but needs password
I think the first is also running bash. Have you tried running lxsession
? Although it's unusable, I get this weird new Trash can and the Unity linux installer appearing strangely.
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "89"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f767697%2frunning-ubuntu-touch-applications-in-command-line-for-gdb-debugging%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Well, I think I found something that explains some of the things I was wondering about - but I'd still love for someone to post a proper erudite answer, so I'm not going to accept this one for now...
Anyways, the resource is:
Bug #1367871 “ubuntu-app-launch doesn't pass arguments to the executable” : Bugs : Ubuntu Application Launcher
https://bugs.launchpad.net/ubuntu-app-launch/+bug/1367871
UAL isn't designed to run custom binaries how ever you'd like, it's designed to launch applications. An application is defined with a bunch of different metadata, but one of the key ones is a desktop file. That file defines how to launch the application and is what UAL decides to use for how to launch it. In this way the application can get launched in a consistent manner and is the same thing from device to device. [...]
The tricky thing about app confinement, is that command line arguments and environment variables aren't really a good mix for it. An "app" is completely separate from the rest of the system, in the click package world. There are some hooks in click to set up symlinks or such, for other parts of the system to be able to easily find those apps, such as ubuntu-app-launch and the apps scope. But they are not command line applications, and you can't simply just run them from the command line with arbitrary configuration.
add a comment |
Well, I think I found something that explains some of the things I was wondering about - but I'd still love for someone to post a proper erudite answer, so I'm not going to accept this one for now...
Anyways, the resource is:
Bug #1367871 “ubuntu-app-launch doesn't pass arguments to the executable” : Bugs : Ubuntu Application Launcher
https://bugs.launchpad.net/ubuntu-app-launch/+bug/1367871
UAL isn't designed to run custom binaries how ever you'd like, it's designed to launch applications. An application is defined with a bunch of different metadata, but one of the key ones is a desktop file. That file defines how to launch the application and is what UAL decides to use for how to launch it. In this way the application can get launched in a consistent manner and is the same thing from device to device. [...]
The tricky thing about app confinement, is that command line arguments and environment variables aren't really a good mix for it. An "app" is completely separate from the rest of the system, in the click package world. There are some hooks in click to set up symlinks or such, for other parts of the system to be able to easily find those apps, such as ubuntu-app-launch and the apps scope. But they are not command line applications, and you can't simply just run them from the command line with arbitrary configuration.
add a comment |
Well, I think I found something that explains some of the things I was wondering about - but I'd still love for someone to post a proper erudite answer, so I'm not going to accept this one for now...
Anyways, the resource is:
Bug #1367871 “ubuntu-app-launch doesn't pass arguments to the executable” : Bugs : Ubuntu Application Launcher
https://bugs.launchpad.net/ubuntu-app-launch/+bug/1367871
UAL isn't designed to run custom binaries how ever you'd like, it's designed to launch applications. An application is defined with a bunch of different metadata, but one of the key ones is a desktop file. That file defines how to launch the application and is what UAL decides to use for how to launch it. In this way the application can get launched in a consistent manner and is the same thing from device to device. [...]
The tricky thing about app confinement, is that command line arguments and environment variables aren't really a good mix for it. An "app" is completely separate from the rest of the system, in the click package world. There are some hooks in click to set up symlinks or such, for other parts of the system to be able to easily find those apps, such as ubuntu-app-launch and the apps scope. But they are not command line applications, and you can't simply just run them from the command line with arbitrary configuration.
Well, I think I found something that explains some of the things I was wondering about - but I'd still love for someone to post a proper erudite answer, so I'm not going to accept this one for now...
Anyways, the resource is:
Bug #1367871 “ubuntu-app-launch doesn't pass arguments to the executable” : Bugs : Ubuntu Application Launcher
https://bugs.launchpad.net/ubuntu-app-launch/+bug/1367871
UAL isn't designed to run custom binaries how ever you'd like, it's designed to launch applications. An application is defined with a bunch of different metadata, but one of the key ones is a desktop file. That file defines how to launch the application and is what UAL decides to use for how to launch it. In this way the application can get launched in a consistent manner and is the same thing from device to device. [...]
The tricky thing about app confinement, is that command line arguments and environment variables aren't really a good mix for it. An "app" is completely separate from the rest of the system, in the click package world. There are some hooks in click to set up symlinks or such, for other parts of the system to be able to easily find those apps, such as ubuntu-app-launch and the apps scope. But they are not command line applications, and you can't simply just run them from the command line with arbitrary configuration.
answered May 11 '16 at 8:14
sdbbssdbbs
5561420
5561420
add a comment |
add a comment |
I'm running Lubuntu, and I find that these work fine from a remote shell started with ssh -Y user@linuxbox:
ubuntu-app-launch "qterminal"
qterminal
The first launches qterminal in Quartz and doesn't need to ask my password
The second also launches qterminal but needs password
I think the first is also running bash. Have you tried running lxsession
? Although it's unusable, I get this weird new Trash can and the Unity linux installer appearing strangely.
add a comment |
I'm running Lubuntu, and I find that these work fine from a remote shell started with ssh -Y user@linuxbox:
ubuntu-app-launch "qterminal"
qterminal
The first launches qterminal in Quartz and doesn't need to ask my password
The second also launches qterminal but needs password
I think the first is also running bash. Have you tried running lxsession
? Although it's unusable, I get this weird new Trash can and the Unity linux installer appearing strangely.
add a comment |
I'm running Lubuntu, and I find that these work fine from a remote shell started with ssh -Y user@linuxbox:
ubuntu-app-launch "qterminal"
qterminal
The first launches qterminal in Quartz and doesn't need to ask my password
The second also launches qterminal but needs password
I think the first is also running bash. Have you tried running lxsession
? Although it's unusable, I get this weird new Trash can and the Unity linux installer appearing strangely.
I'm running Lubuntu, and I find that these work fine from a remote shell started with ssh -Y user@linuxbox:
ubuntu-app-launch "qterminal"
qterminal
The first launches qterminal in Quartz and doesn't need to ask my password
The second also launches qterminal but needs password
I think the first is also running bash. Have you tried running lxsession
? Although it's unusable, I get this weird new Trash can and the Unity linux installer appearing strangely.
answered Apr 4 at 7:55
TomachiTomachi
1012
1012
add a comment |
add a comment |
Thanks for contributing an answer to Ask Ubuntu!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f767697%2frunning-ubuntu-touch-applications-in-command-line-for-gdb-debugging%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown