Elegir aplicación por defecto de ~/.local/share/applications

2018/12/26

Se desea elegir el navegador web por defecto de un archivo .desktop al que se le modificó la linea Exec para customizar los parámetros del navegador web Firefox y que se encuentra en el directorio ~/.local/share/applications.

Este cambio se quiere realizar en el entorno de escritorio mate, pero es un error conocido reportado en el issue 150 de mate-control-center que no es posible elegir aplicaciones de ~/.local/share/applications como aplicaciones por defecto.

En uno de los comentarios del issue se indica que el problema parece ser la función g_app_info_get_all_for_type de la librería gio.

Revisando el código fuente de mate-control-center, en particular el que establece el navegador web por defecto se encuentra que efectivamente el problema correspondería a la función antes mencionada:

                        case DA_TYPE_WEB_BROWSER:
                                g_app_info_set_as_default_for_type(item, "x-scheme-handler/http", NULL);
                                g_app_info_set_as_default_for_type(item, "x-scheme-handler/https", NULL);
                                g_app_info_set_as_default_for_type(item, "text/html", NULL);
                                /* about:config is used by firefox and others */
                                g_app_info_set_as_default_for_type(item, "x-scheme-handler/about", NULL);
                                break;

Como workaround se puede usar el comando gio que se encuentra disponible en el paquete libglib2.0-bin de Debian y cuya descripción de la página del manual es la siguiente:

gio is a utility that makes many of the GIO features available from the commandline.

Para instalar el paquete se utiliza:

$ sudo apt-get install -Vy libglib2.0-bin

El workaround implica establecer manualmente el archivo .desktop a utilizar mediante la opción mime del comando gio. El parámetro MIMETYPE se corresponde a los parámetros utilizados en el código anterior por la función g_app_info_set_as_default_for_type.

En el caso de que el archivo .desktop de la aplicación es firefox-private.desktop (ver post anterior), el comando a introducir es el siguiente:

$ for mimetype in x-scheme-handler/http x-scheme-handler/https text/html x-scheme-handler/about; do
    gio mime $mimetype firefox-private.desktop
done

Nota: Es probable que en gnome ocurra el mismo problema, por lo que el workaround anterior debería ser útil también en dicho escritorio.