Est-il possible d'ouvrir une application Ubuntu depuis HTML?

16

Je crée une page Web en ce moment et je me demande s'il est possible de saisir une commande en HTML qui ouvrira une application Ubuntu installée comme Chromium, ou une fenêtre de terminal, ou Nautilus.

Est-ce que quelque chose comme ça est possible? Merci!

I Heart Ubuntu
la source
Dans Windows, c'était le cas, mais uniquement si vous exécutiez IExplorer, mais en raison du fait qu'une page Web n'est que du texte avec un peu de magie côté serveur, cela limite les capacités d'un navigateur. Je suis sûr que quelqu'un trouvera quelque chose. L'application Java peut être?
SimplySimon
1
Vous devriez peut-être clarifier dans quel environnement vous utilisez car il est très large pour le moment. Par exemple - vous pourriez exécuter une page html dans webkit-webview qui pourrait être connectée à une application basée sur python, etc.
fossfreedom
Hmmm ... J'ai supposé du HTML pur @fossfreedom>: - D
Rinzwind
Oui, ce n'est qu'une page Web HTML de base. Pas de bases de données ou quoi que ce soit.
I Heart Ubuntu
Si son aide, le site sera pour les utilisateurs de Linux. Tout le monde pourrait l'utiliser naturellement, mais je le conçois strictement pour les utilisateurs de Linux / Ubuntu. Semble assez simple. Lancez une application Ubuntu comme le terminal ou la calculatrice à partir d'un lien sur une page Web. Par exemple, si je fais "apt: // chrome-browser", il ouvre la page Chrome d'Ubuntu Software Centers. Nous savons donc que nous pouvons lancer au moins l'USC à partir de HTML. Qu'en est-il des applications Ubuntu / linux?
I Heart Ubuntu

Réponses:

21

Oui, vous pouvez en ajoutant un nouveau gestionnaire de protocole dans votre Ubuntu. La méthode suivante vous montrera comment enregistrer le processus d'ouverture d'une application en tant que app://[application_name]gestionnaire de protocole dans Ubuntu.

1. Créer un script de lancement d'application

  • Dans une exécution de terminal:

    mkdir -p bin
    

    Cette commande crée un binrépertoire dans votre homedossier si vous ne l'avez pas déjà.

  • Après la course:

    gedit ~/bin/open_app.sh
    

    Cela créera le nouveau fichier open_app.shdans gedit.

  • Copiez et collez le script suivant dans le nouveau fichier créé:

    #!/bin/bash
    
    if [[ "$1" != "app://" ]]; then 
        app=${1#app://}
        nohup "$app" &>/dev/null &
    else 
        nohup gnome-terminal &>/dev/null &
    fi
  • Enregistrez le fichier et fermez-le.

  • Retournez dans le terminal et exécutez:

    chmod +x ~/bin/open_app.sh
    

    pour accorder un accès d'exécution au script.

2. Créez un fichier .desktop pour le lanceur d'applications

Vous devez maintenant créer un lanceur .desktop pour le script ci-dessus et dire à Ubuntu d'utiliser ce lanceur comme app://gestionnaire de protocole. Créez un /usr/share/applications/appurl.desktopfichier à l'aide de la commande suivante:

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

et ajoutez le contenu suivant:

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

Enregistrez le fichier et fermez-le.

3. Actualiser la base de données des types MIME

Dans le fichier ci-dessus, le gestionnaire de schéma de MimeType=x-scheme-handler/app;registre de ligne app://, mais pour le faire fonctionner, nous devons mettre à jour le cache de la base de données des types MIME en exécutant la commande:

sudo update-desktop-database 

4. Test depuis le terminal

Maintenant, tout devrait fonctionner. Pour tester son fonctionnement à partir du terminal, exécutez par exemple cette commande:

xdg-open 'app://gedit'

4. Testez à partir du navigateur en utilisant HTML

Vous pouvez tester à partir du navigateur en utilisant par exemple la page Web HTML suivante:

<!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>

Le résultat:

app: //

Radu Rădeanu
la source
2
Très très gentil. 1 petit problème: les utilisateurs du site ne disposeront pas de ces scripts, lanceurs et types MIME. Vous devez donc également les fournir d'une manière ou d'une autre à partir du site Web. Avec navigator.registerProtocolHandler, il devrait être possible de faire sans installer de logiciel. Mais ça a l'air très très sympa :-D
Rinzwind
@Rinzwind Eh bien, un script qui automatise les étapes 1, 2 et 3 peut être fourni aux utilisateurs utilisant le site Web avant d'utiliser le app://gestionnaire de schéma. En utilisant la exec()fonction de PHP, par exemple, ce script peut être exécuté pour s'exécuter dans le navigateur.
Radu Rădeanu
exec () s'exécutera côté serveur, pas côté client. Si vous essayez côté client, vous constaterez que la sécurité des navigateurs empêchera l'exécution des scripts
NGRhodes
1
Cool! N'oubliez pas de changer raduvotre nom en appurl.desktop. Comme:Exec=/home/{YOUR NAME HERE}/bin/open_app.sh %u
@ RaduRădeanu Est-il possible de lancer un script au lieu d'une application? Par exemple, app://shell-exec myscript.shoù shell-exec n'est qu'un autre script ( #!/bin/sh "$@" exec "$SHELL")
Khurshid Alam
5

Oui, cela s'appelle des "gestionnaires de protocoles basés sur le Web". Vous avez besoin de Chrome 13 ou Firefox 3.0 ou supérieur. Je l'ai vu utilisé pour ouvrir LibreOffice.

Les deux Mozilla et updates.html5rocks ont une explication sur la façon dont cela fonctionne. (Ouvrir dans Chrome / Chromium chrome://settings/handlerset il affichera une liste des gestionnaires actuels. Firefox les répertoriera about:config.)

Pièces du 1er lien:

Enregistrement

La configuration d'une application Web en tant que gestionnaire de protocole n'est pas un processus difficile. Fondamentalement, l'application Web utilise registerProtocolHandler () pour s'enregistrer auprès du navigateur en tant que gestionnaire potentiel pour un protocole donné. Par exemple:

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

Où les paramètres sont:

  • Le protocole.
  • Le modèle d'URL, utilisé comme gestionnaire. Le "% s" est remplacé par le href du lien et un GET est exécuté sur l'URL résultante.
  • Nom convivial du gestionnaire de protocole.

Lorsqu'un navigateur exécute ce code, il doit afficher une invite à l'utilisateur, demandant la permission d'autoriser l'application Web à s'enregistrer en tant que gestionnaire du protocole. Firefox affiche une invite dans la zone de barre de notification.

Exemple

<!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
la source
Agréable. Existe-t-il un moyen de transmettre des paramètres à l'application locale?
AlikElzin-kilaka
1
Cela semble autoriser des applications comme un webmailer, mais aucune application externe (locale).
geek-merlin
Lisez les détails ici et ici . De plus, sur le premier lien , vous verrez également que le schemen'est limité qu'à quelques-uns. La solution acceptée offrira une meilleure résolution (bien sûr avec quelques ajustements si nécessaire).
Fr0zenFyr
Pour les curieux, se référer aux spécifications du consortium W3
Fr0zenFyr