'\" t
.\"     Title: gapplication
.\"    Author: Ryan Lortie
.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
.\"      Date: 07/20/2016
.\"    Manual: User Commands
.\"    Source: GIO
.\"  Language: English
.\"
.TH "GAPPLICATION" "1" "" "GIO" "User Commands"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
gapplication \- D\-Bus application launcher
.SH "SYNOPSIS"
.HP \w'\fBgapplication\fR\ 'u
\fBgapplication\fR help [\fICOMMAND\fR]
.HP \w'\fBgapplication\fR\ 'u
\fBgapplication\fR version
.HP \w'\fBgapplication\fR\ 'u
\fBgapplication\fR list\-apps
.HP \w'\fBgapplication\fR\ 'u
\fBgapplication\fR launch \fIAPPID\fR
.HP \w'\fBgapplication\fR\ 'u
\fBgapplication\fR launch \fIAPPID\fR [\fIFILE\fR...]
.HP \w'\fBgapplication\fR\ 'u
\fBgapplication\fR list\-actions \fIAPPID\fR
.HP \w'\fBgapplication\fR\ 'u
\fBgapplication\fR action \fIAPPID\fR \fIACTION\fR [\fIPARAMETER\fR]
.SH "DESCRIPTION"
.PP
\fBgapplication\fR
is a commandline implementation of the client\-side of the
org\&.freedesktop\&.Application
interface as specified by the freedesktop\&.org Desktop Entry Specification\&.
.PP
\fBgapplication\fR
can be used to start applications that have
\fIDBusActivatable\fR
set to
true
in their
\&.desktop
files and can be used to send messages to already\-running instances of other applications\&.
.PP
It is possible for applications to refer to
\fBgapplication\fR
in the
\fIExec\fR
line of their
\&.desktop
file to maintain backwards compatibility with implementations that do not directly support
\fIDBusActivatable\fR\&.
.PP
\fBgapplication\fR
ships as part of
GLib\&.
.SH "COMMANDS"
.SS "Global commands"
.PP
\fBhelp\fR [\fICOMMAND\fR]
.RS 4
Displays a short synopsis of the available commands or provides detailed help on a specific command\&.
.RE
.PP
\fBversion\fR
.RS 4
Prints the GLib version whence
\fBgapplication\fR
came\&.
.RE
.PP
\fBlist\-apps\fR
.RS 4
Prints a list of all application IDs that are known to support D\-Bus activation\&. This list is generated by scanning
\&.desktop
files as per the current
\fBXDG_DATA_DIRS\fR\&.
.RE
.PP
\fBlaunch\fR \fIAPPID\fR [\fIFILE\fR...]
.RS 4
Launches an application\&.
.sp
The first parameter is the application ID in the familiar "reverse DNS" style (eg: \*(Aqorg\&.gnome\&.app\*(Aq) without the
\&.desktop
suffix\&.
.sp
Optionally, if additional parameters are given, they are treated as the names of files to open and may be filenames or URIs\&. If no files are given then the application is simply activated\&.
.RE
.PP
\fBlist\-actions\fR \fIAPPID\fR
.RS 4
List the actions declared in the application\*(Aqs
\&.desktop
file\&. The parameter is the application ID, as above\&.
.RE
.PP
\fBaction\fR \fIAPPID\fR \fIACTION\fR [\fIPARAMETER\fR]
.RS 4
Invokes the named action (in the same way as would occur when activating an action specified in the
\&.desktop
file)\&.
.sp
The application ID (as above) is the first parameter\&. The action name follows\&.
.sp
Optionally, following the action name can be one parameter, in GVariant format, given as a single argument\&. Make sure to use sufficient quoting\&.
.RE
.SH "EXAMPLES"
.SS "From the commandline"
.PP
Launching an application:
.sp
.if n \{\
.RS 4
.\}
.nf
        gapplication launch org\&.example\&.fooview
      
.fi
.if n \{\
.RE
.\}
.PP
Opening a file with an application:
.sp
.if n \{\
.RS 4
.\}
.nf
        gapplication launch org\&.example\&.fooview ~/file\&.foo
      
.fi
.if n \{\
.RE
.\}
.PP
Opening many files with an application:
.sp
.if n \{\
.RS 4
.\}
.nf
        gapplication launch org\&.example\&.fooview ~/foos/*\&.foo
      
.fi
.if n \{\
.RE
.\}
.PP
Invoking an action on an application:
.sp
.if n \{\
.RS 4
.\}
.nf
        gapplication action org\&.example\&.fooview create
      
.fi
.if n \{\
.RE
.\}
.PP
Invoking an action on an application, with an action:
.sp
.if n \{\
.RS 4
.\}
.nf
        gapplication action org\&.example\&.fooview show\-item \*(Aq"item_id_828739"\*(Aq
      
.fi
.if n \{\
.RE
.\}
.SS "From the \fIExec\fR lines of a \&.desktop file"
.PP
The commandline interface of
\fBgapplication\fR
was designed so that it could be used directly from the
\fIExec\fR
line of a
\&.desktop
file\&.
.PP
You might want to do this to allow for backwards compatibility with implementations of the specification that do not understand how to do D\-Bus activation, without having to install a separate utility program\&.
.PP
Consider the following example:
.sp
.if n \{\
.RS 4
.\}
.nf
        [Desktop Entry]
        Version=1\&.1
        Type=Application
        Name=Foo Viewer
        DBusActivatable=true
        MimeType=image/x\-foo;
        Exec=gapplication launch org\&.example\&.fooview %F
        Actions=gallery;create;

        [Desktop Action gallery]
        Name=Browse Gallery
        Exec=gapplication action org\&.example\&.fooview gallery

        [Desktop Action create]
        Name=Create a new Foo!
        Exec=gapplication action org\&.example\&.fooview create
      
.fi
.if n \{\
.RE
.\}
.SS "From a script"
.PP
If installing an application that supports D\-Bus activation you may still want to put a file in
/usr/bin
so that your program can be started from a terminal\&.
.PP
It is possible for this file to be a shell script\&. The script can handle arguments such as \-\-help and \-\-version directly\&. It can also parse other command line arguments and convert them to uses of
\fBgapplication\fR
to activate the application, open files, or invoke actions\&.
.PP
Here is a simplified example, as may be installed in
/usr/bin/fooview:
.sp
.if n \{\
.RS 4
.\}
.nf
        #!/bin/sh

        case "$1" in
          \-\-help)
            echo "see \*(Aqman fooview\*(Aq for more information"
            ;;

          \-\-version)
            echo "fooview 1\&.2"
            ;;

          \-\-gallery)
            gapplication action org\&.example\&.fooview gallery
            ;;

          \-\-create)
            gapplication action org\&.example\&.fooview create
            ;;

          \-*)
            echo "unrecognised commandline argument"
            exit 1
            ;;

          *)
            gapplication launch org\&.example\&.fooview "$@"
            ;;
        esac
      
.fi
.if n \{\
.RE
.\}
.SH "SEE ALSO"
.PP
\m[blue]\fBDesktop Entry Specification\fR\m[]\&\s-2\u[1]\d\s+2,
\fBgdbus\fR(1),
\fBxdg-open\fR(1),
\fBdesktop-file-validate\fR(1)
.SH "NOTES"
.IP " 1." 4
Desktop Entry Specification
.RS 4
\%http://standards.freedesktop.org/desktop-entry-spec/latest/
.RE
