É possível abrir um aplicativo Ubuntu a partir de HTML?


16

Estou criando uma página da Web no momento e estou imaginando se é possível inserir um comando em HTML que abra um aplicativo Ubuntu instalado, como o Chromium, ou uma janela de terminal ou o Nautilus.

É algo assim possível? Obrigado!


No Windows, foi, mas apenas se você executou o IExplorer, mas devido ao fato de uma página da Web ser texto apenas com um pouco de mágica do servidor, isso limita a capacidade de um navegador. Tenho certeza de que alguém irá inventar alguma coisa. Aplicativo Java pode ser?
precisa saber é o seguinte

11
Talvez você deva esclarecer em que ambiente está executando, pois é muito amplo no momento. Por exemplo - você pode estar executando uma página html dentro webkit-webview que pode ser conectado a um python baseado app etc etc.
fossfreedom

Hmmm ... Eu assumi HTML puro @fossfreedom>: - D
Rinzwind

Sim, esta é apenas uma página HTML básica. Sem bancos de dados ou qualquer coisa.
I Heart Ubuntu

Se houver alguma ajuda, o site será para usuários do Linux. Qualquer um poderia usá-lo naturalmente, mas estou projetando isso estritamente para usuários de Linux / Ubuntu. Parece bastante simples. Inicie um aplicativo Ubuntu como o terminal ou a calculadora a partir de um link em uma página da web. Por exemplo, se eu fizer "apt: // chromium-browser", ele abrirá a página do Ubuntu Software Centers Chromium. Portanto, sabemos que podemos lançar pelo menos o USC a partir de HTML. E os aplicativos Ubuntu / Linux?
I Heart Ubuntu

Respostas:


21

Sim, você pode adicionar um novo manipulador de protocolo no seu Ubuntu. O método a seguir mostrará como registrar o processo de abertura de um aplicativo como app://[application_name]manipulador de protocolo no Ubuntu.

1. Criar script do iniciador de aplicativos

  • Em uma execução de terminal:

    mkdir -p bin
    

    Este comando criará um bindiretório em sua homepasta se você ainda não o tiver.

  • Após a execução:

    gedit ~/bin/open_app.sh
    

    Isso criará o novo arquivo open_app.shno gedit.

  • Copie e cole o seguinte script no novo arquivo criado:

    #!/bin/bash
    
    if [[ "$1" != "app://" ]]; then 
        app=${1#app://}
        nohup "$app" &>/dev/null &
    else 
        nohup gnome-terminal &>/dev/null &
    fi
  • Salve o arquivo e feche-o.

  • Volte ao terminal e execute:

    chmod +x ~/bin/open_app.sh
    

    para conceder acesso de execução ao script.

2. Crie um arquivo .desktop para o iniciador de aplicativos

Agora você deve criar um iniciador .desktop para o script acima e dizer ao Ubuntu para usá-lo como app://manipulador de protocolo. Crie um /usr/share/applications/appurl.desktoparquivo usando o seguinte comando:

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

e adicione o seguinte conteúdo:

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

Salve o arquivo e feche-o.

3. Atualizar banco de dados de tipos MIME

No arquivo acima, o manipulador do esquema de MimeType=x-scheme-handler/app;registro de linha app://, mas para fazê-lo funcionar, devemos atualizar o cache do banco de dados de tipos mime executando o comando:

sudo update-desktop-database 

4. Teste do terminal

Agora tudo deve funcionar. Para testar se funciona a partir do terminal, execute, por exemplo, este comando:

xdg-open 'app://gedit'

4. Teste no navegador usando HTML

Você pode testar no navegador usando, por exemplo, a seguinte página da 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>

O resultado:

aplicativo://


2
Muito muito bom. Um pequeno problema: os usuários que usam o site não terão esses scripts, lançadores e tipos MIME. Então, você também precisa fornecê-los de alguma maneira no site. Com o navigator.registerProtocolHandler, deve ser possível instalar o software sem a instalação. Mas parece muito, muito bom :-D
Rinzwind

@Rinzwind Bem, um script que automatiza as etapas 1, 2 e 3 pode ser fornecido aos usuários que usam o site antes de usar o app://manipulador de esquema. Usando a exec()função do PHP, por exemplo, esse script pode ser criado para ser executado no navegador.
Radu Rădeanu 14/08

exec () executará no lado do servidor, não no lado do cliente. Se você tentar lado do cliente, você vai encontrar segurança navegadores irá impedir os scripts rodando
NGRhodes

11
Legal! Lembre-se de mudar radupara o seu nome em appurl.desktop. Como:Exec=/home/{YOUR NAME HERE}/bin/open_app.sh %u

@ RaduRădeanu É possível iniciar um script em vez de um aplicativo? Por exemplo app://shell-exec myscript.sh, onde shell-exec é apenas um outro script ( #!/bin/sh "$@" exec "$SHELL")
Khurshid Alam

5

Sim, é chamado de "manipuladores de protocolo baseados na Web". Você precisa do Chrome 13 ou Firefox 3.0 ou superior. Eu já vi isso usado para abrir o LibreOffice.

Ambos Mozilla e updates.html5rocks ter uma explicação sobre como isso funciona. (Abra no Chrome / Chromium chrome://settings/handlerse ele mostrará uma lista dos manipuladores atuais. O Firefox os listará about:config.)

Peças do 1º link:

Registrando

Configurar um aplicativo Web como manipulador de protocolo não é um processo difícil. Basicamente, o aplicativo da Web usa registerProtocolHandler () para se registrar no navegador como um manipulador em potencial para um determinado protocolo. Por exemplo:

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

Onde os parâmetros são:

  • O protocolo.
  • O modelo de URL, usado como manipulador. O "% s" é substituído pelo href do link e um GET é executado no URL resultante.
  • O nome amigável para o manipulador de protocolo.

Quando um navegador executa esse código, ele deve exibir um prompt para o usuário, solicitando permissão para permitir que o aplicativo da Web se registre como manipulador do protocolo. O Firefox exibe um prompt na área da barra de notificação.

Exemplo

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

Agradável. Existe uma maneira de passar parâmetros para o aplicativo local?
AlikElzin-Kilaka

11
Isso parece permitir aplicativos como um webmailer, mas nenhum aplicativo externo (local).
Geek-merlin #

Leia os detalhes aqui e aqui . Além disso, no primeiro link , você também verá que o schemeconteúdo está restrito a apenas alguns. A solução aceita fornecerá uma resolução melhor (é claro, com alguns ajustes conforme necessário).
Fr0zenFyr

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.