¿Es posible abrir una aplicación Ubuntu desde HTML?

16

Estoy creando una página web en este momento y me pregunto si es posible ingresar un comando en HTML que abra una aplicación Ubuntu instalada como Chromium, o una ventana de terminal, o Nautilus.

¿Es posible algo así? ¡Gracias!

I Heart Ubuntu
fuente
En Windows lo era, pero solo si ejecutaba IExplorer, pero debido al hecho de que una página web es solo texto con un poco de magia del lado del servidor, esto limita lo que un navegador es capaz de hacer. Estoy seguro de que a alguien se le ocurrirá algo. Aplicación de Java puede ser?
SimplySimon
1
Quizás deba aclarar en qué entorno se está ejecutando, ya que es muy amplio en este momento. Por ejemplo, podría estar ejecutando una página html dentro de webkit-webview que podría estar conectada a una aplicación basada en Python, etc., etc.
fossfreedom
Hmmm ... asumí HTML puro @fossfreedom>: - D
Rinzwind
Sí, esta es solo una página web HTML básica. No hay bases de datos ni nada.
I Heart Ubuntu
Si es de alguna ayuda, el sitio será para usuarios de Linux. Cualquiera podría usarlo naturalmente, pero estoy diseñando esto estrictamente para usuarios de Linux / Ubuntu. Parece bastante simple. Inicie una aplicación de Ubuntu como el terminal o la calculadora desde un enlace en una página web. Por ejemplo, si hago "apt: // chromium-browser", se abre la página Chromium de Ubuntu Software Centers. Entonces sabemos que podemos lanzar al menos el USC desde HTML. ¿Qué pasa con las aplicaciones Ubuntu / Linux?
I Heart Ubuntu

Respuestas:

21

Sí, puedes agregar un nuevo controlador de protocolo en tu Ubuntu. El siguiente método le mostrará cómo registrar el proceso de abrir una aplicación como app://[application_name]controlador de protocolo en Ubuntu.

1. Crear script de iniciador de aplicaciones

  • En una ejecución de terminal:

    mkdir -p bin
    

    Este comando creará un bindirectorio en su homecarpeta si aún no lo tiene.

  • Despues de correr:

    gedit ~/bin/open_app.sh
    

    Esto creará el nuevo archivo open_app.shen gedit.

  • Copie y pegue el siguiente script en el nuevo archivo creado:

    #!/bin/bash
    
    if [[ "$1" != "app://" ]]; then 
        app=${1#app://}
        nohup "$app" &>/dev/null &
    else 
        nohup gnome-terminal &>/dev/null &
    fi
  • Guarde el archivo y ciérrelo.

  • Vuelve a la terminal y ejecuta:

    chmod +x ~/bin/open_app.sh
    

    para otorgar acceso de ejecución para el script.

2. Cree un archivo .desktop para el iniciador de aplicaciones

Ahora debe crear un iniciador .desktop para el script anterior y decirle a Ubuntu que use este iniciador como app://controlador de protocolo. Cree un /usr/share/applications/appurl.desktoparchivo con el siguiente comando:

sudo -H gedit /usr/share/applications/appurl.desktop

y agregue el siguiente contenido:

[Desktop Entry]
Name=TerminalURL
Exec=/home/radu/bin/open_app.sh %u
Type=Application
NoDisplay=true
Categories=System;
MimeType=x-scheme-handler/app;

Guarde el archivo y ciérrelo.

3. Actualizar la base de datos de tipos MIME

En el archivo anterior, el controlador del esquema de MimeType=x-scheme-handler/app;registro de línea app://, pero para que funcione, debemos actualizar el caché de la base de datos de tipos MIME ejecutando el comando:

sudo update-desktop-database 

4. Prueba desde la terminal

Ahora todo debería funcionar. Para probar que funciona desde la terminal, ejecute, por ejemplo, este comando:

xdg-open 'app://gedit'

4. Prueba desde el navegador usando HTML

Puede probar desde el navegador utilizando, por ejemplo, la siguiente página web HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <title>Open some applications</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>

<body>
        <h3>Open some applications in Ubuntu from HTML</h3>
        <p>Open terminal: <a title="Open" href="app://">app://</a>
        (equivalent with: <a title="Open" href="app://gnome-terminal">app://gnome-terminal</a>)</p>
        <p>Open Nautilus: <a title="Open" href="app://nautilus">app://nautilus</a></p>
        <p>Open Chromium: <a title="Open" href="app://chromium-browser">app://chromium-browser</a></p>
        <p>Open Ubuntu Software Center: <a title="Open" href="app://software-center">app://software-center</a>
        (equivalent with: <a title="Open" href="apt://">apt://</a>)</p>
        <p>...and so on</p>
</body>

</html>

El resultado:

aplicación: //

Radu Rădeanu
fuente
2
Muy, muy agradable. 1 pequeño problema: los usuarios que usan el sitio web no tendrán esos scrips, lanzadores y tipos mime. Por lo tanto, también debe proporcionarlos de alguna manera desde el sitio web. Con navigator.registerProtocolHandler debería ser posible hacer sin instalar software. Pero se ve muy, muy agradable :-D
Rinzwind
@Rinzwind Bueno, un script que automatiza los pasos 1, 2 y 3 se puede proporcionar a los usuarios que usan el sitio web antes de usar el app://controlador de esquema. Usando la exec()función de PHP, por ejemplo, ese script puede ejecutarse en el navegador.
Radu Rădeanu
exec () ejecutará el lado del servidor, no el lado del cliente. Si intenta lado del cliente, se encuentra la seguridad de los navegadores impedirá que las secuencias de comandos se ejecuta
NGRhodes
1
¡Frio! Recuerde cambiar radusu nombre en appurl.desktop. Como:Exec=/home/{YOUR NAME HERE}/bin/open_app.sh %u
@ RaduRădeanu ¿Es posible iniciar un script en lugar de una aplicación? Por ejemplo, app://shell-exec myscript.shdonde shell-exec es solo otro script ( #!/bin/sh "$@" exec "$SHELL")
Khurshid Alam
5

Sí, se llama "controladores de protocolos basados ​​en la web". Necesita Chrome 13 o Firefox 3.0 o superior. He visto que solía abrir LibreOffice.

Tanto Mozilla como updates.html5rocks tienen una explicación sobre cómo funciona esto. (Abra en Chrome / Chromium chrome://settings/handlersy mostrará una lista de controladores actuales. Firefox los incluirá about:config).

Partes del primer enlace:

Registrarse

Configurar una aplicación web como un controlador de protocolo no es un proceso difícil. Básicamente, la aplicación web utiliza registerProtocolHandler () para registrarse en el navegador como un posible controlador para un protocolo dado. Por ejemplo:

navigator.registerProtocolHandler("mailto",
                              "https://www.example.com/?uri=%s",
                              "Example Mail");

Donde los parámetros son:

  • El protocolo.
  • La plantilla de URL, utilizada como manejador. El "% s" se reemplaza con la href del enlace y se ejecuta un GET en la URL resultante.
  • El nombre fácil de usar para el controlador de protocolo.

Cuando un navegador ejecuta este código, debe mostrar un mensaje al usuario, pidiéndole permiso para permitir que la aplicación web se registre como un controlador para el protocolo. Firefox muestra un mensaje en el área de la barra de notificaciones.

Ejemplo

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <title>Web Protocol Handler Sample - Register</title>
    <script type="text/javascript">
navigator.registerProtocolHandler("fake", "http://starkravingfinkle.org/projects/wph/handler.php?value=%s", "Fake Protocol");
    </script>
</head>
<body>
    <h1>Web Protocol Handler Sample</h1>
    <p>This web page will install a web protocol handler for the <code>fake:</code> protocol.</p>
</body>
</html>
Rinzwind
fuente
Agradable. ¿Hay alguna manera de pasar los parámetros a la aplicación local?
AlikElzin-kilaka
1
Esto parece permitir aplicaciones como un webmailer, pero no aplicaciones externas (locales).
geek-merlin
Lea los detalles aquí y aquí . Además, en el primer enlace , también verá que schemeestá restringido a solo unos pocos. La solución aceptada ofrecerá una mejor resolución (por supuesto, con algunos ajustes según sea necesario).
Fr0zenFyr
Para los curiosos, consulte las especificaciones del consorcio W3
Fr0zenFyr