On Mon, Mar 26, 2018 at 07:17:36PM +0200, Marek Marczykowski-Górecki wrote:
> On Sun, Mar 25, 2018 at 10:48:44PM +0000, Davíð Steinn Geirsson wrote:
> > Hi,
> > 
> > One thing I would really like is a way to invoke a run dialog through the
> > domains tray. It would be especially useful for dispvms, which don't really
> > provide any way to run additional commands after startup beyond 'qvm-run'
> > in a dom0 shell.
> > 
> > I would like to implement this. I've already extended the dbus interface
> > in qubesdbus/models.py to expose the vm.run() method. 
> 
> vm.run() (and qvm-run with just a command) use qubes.VMShell service,
> which should be used as a last resort (generally we plan to limit access
> to this service as much as possible, because it gives full control over
> the VM). For starting an application there is qubes.StartApp, with
> argument being a name of .desktop file in /usr/share/applications
> (without actual .desktop extension). Check menu entries for example
> usage. Note that some applications have different .desktop filename than
> actual executable - for example gnome-terminal has org.gnome.Terminal.

Thanks, I changed my patches to expose RunService instead, and used
qubes.StartApp in the dialog.

> 
> > Adding a menu
> > item for the tray application looks easy. But as far as I can see there
> > is no run dialog/application launcher I can count on being installed
> > in all templates.
> > 
> > Does anyone know if there is such a thing already installed on the current
> > templates? If not, would it be acceptable to add for example gmrun to the
> > template default packages? Suggestions for a better launcher also
> > appreciated, though ideally with minimal dependencies.
> 
> The most universal thing to do, would be to ask for the command still in
> dom0. But you wont get command completion and such features.

That was my thinking, command completion would be handy. However after
further thought I don't really have any use case for the run menuentry if
I have a "Run Terminal" one. So I just made do with that.

> 
> > 'Run terminal' would also be a very handy menu item. But it has the same
> > problem - we don't know the users installed terminal emulators, though
> > gnome-terminal seems to be included both on debian and fedora templates.
> > Would it be acceptable to hardcode a dependency on that?
> 
> Very similar problem is solved here:
> https://github.com/QubesOS/qubes-desktop-linux-i3/blob/master/i3-settings-qubes/qubes-i3-sensible-terminal
> 
> IMO putting gnome-terminal earlier in that list makes sense. Note that
> minimal templates don't have it - AFAIR only xterm is available there.
> But this is not the best possible solution...

Pushed something similar here, to have it independent of the i3 tools:
https://github.com/QubesOS/qubes-core-agent-linux/pull/105

> 
> Also, related:
> https://github.com/QubesOS/qubes-issues/issues/2706
> 
> > Is there a better way to launch the users preferred terminal? On debian
> > I would use /etc/alternatives/x-terminal-emulator but it seems fedora
> > doesn't use alternatives for this.
> 
> I don't think Fedora have something like this.
> 
> Another option (in addition to the above guessing/hardcoded default?)
> would be to use "features" introduced in Qubes 4.0. This is basically
> arbitrary key-value store associated with a VM. You can use it to set
> preferred terminal application per-VM. And there is a function to get a
> value for a VM, and fallback to a value on its template (if not set for
> the VM).

Hm, that would work. Though since we can't have any sensible default for
this setting we'd still end up with a shellscript like above looking for
fallbacks if the feature isn't configured or the configured shell doesn't
exist.

As it is now it's easy for the user to specify a preferred shell by either
'update-alternatives --config x-terminal-emulator' (on debian) or just
symlinking their preferred terminal to /usr/local/bin/x-terminal-emulator.
I put that first in the search list.


Links to the pull requests:

https://github.com/QubesOS/qubes-core-agent-linux/pull/105
https://github.com/QubesOS/qubes-desktop-linux-manager/pull/22
https://github.com/QubesOS/qubes-dbus/pull/7


> 
> Usage:
> 
> From command line: qvm-features tool.
> 
>     [marmarek@dom0 ~]$ qvm-features personal
>     [marmarek@dom0 ~]$ qvm-features personal preferred-terminal 
>     [marmarek@dom0 ~]$ qvm-features personal preferred-terminal gnome-terminal
>     [marmarek@dom0 ~]$ qvm-features personal preferred-terminal 
>     gnome-terminal
>     [marmarek@dom0 ~]$ qvm-features personal
>     preferred-terminal  gnome-terminal
> 
> From python:
> https://dev.qubes-os.org/projects/core-admin-client/en/latest/qubesadmin.html#module-qubesadmin.features
> 
> Usage:
> 
>     >>> import qubesadmin
>     >>> q = qubesadmin.Qubes()
>     >>> personal = q.domains['personal']
> 
> Get feature:
> 
>     >>> personal.features['preferred-terminal']
>     'gnome-terminal'
> 
> Unset:
> 
>     >>> del personal.features['preferred-terminal']
> 
> Getting feature when not set will get you exception (as any dict in
> python)...
> 
>     >>> personal.features['preferred-terminal']
>     Traceback (most recent call last):
>       File "<stdin>", line 1, in <module>
>       File "/usr/lib/python3.5/site-packages/qubesadmin/features.py", line 
> 55, in __getitem__
>         self.vm.name, 'admin.vm.feature.Get', item).decode('utf-8')
>       File "/usr/lib/python3.5/site-packages/qubesadmin/base.py", line 68, in 
> qubesd_call
>         payload_stream)
>       File "/usr/lib/python3.5/site-packages/qubesadmin/app.py", line 483, in 
> qubesd_call
>         return self._parse_qubesd_response(return_data)
>       File "/usr/lib/python3.5/site-packages/qubesadmin/base.py", line 102, 
> in _parse_qubesd_response
>         raise exc_class(format_string, *args)
>     qubesadmin.exc.QubesFeatureNotFoundError: "'Feature not set for domain 
> personal: preferred-terminal'"
> 
> ...unless you use 'get' and provide default value:
> 
>     >>> personal.features.get('preferred-terminal', 'xterm')
>     'xterm'
> 
> Getting value, with fallback to the one on template (not available from
> command line):
> 
>     >>> f_tpl = q.domains['fedora-26']
>     >>> f_tpl.features['preferred-terminal'] = 'gnome-terminal'
>     >>> personal.features.check_with_template('preferred-terminal', 'xterm')
>     'gnome-terminal'
> 
> -- 
> Best Regards,
> Marek Marczykowski-Górecki
> Invisible Things Lab
> A: Because it messes up the order in which people normally read text.
> Q: Why is top-posting such a bad thing?

-- 
You received this message because you are subscribed to the Google Groups 
"qubes-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to qubes-devel+unsubscr...@googlegroups.com.
To post to this group, send email to qubes-devel@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/qubes-devel/20180328134911.GD60200%40mail.
For more options, visit https://groups.google.com/d/optout.

Attachment: signature.asc
Description: PGP signature

Reply via email to