Session VNC intégrée

Ce dont j'ai besoin, c'est permettre à un utilisateur distant d'accéder à une machine hôte (Ubuntu) via VNC. La capture est que l'utilisateur devrait seulement être autorisé à utiliser un logiciel spécifique et rien d'autre.

Ma solution pour l'instant est d'utiliser x-gtk-vnc pour intégrer un Xwindow spécifique dans une page html côté client. Cela fonctionne … sauf que les options pop-up ne s'inscrivent pas sur le côté client (car elles sont considérées comme des fenêtres distinctes).

La solution possible n ° 1 tourne autour de l'utilisation d'un script pour signaler lorsqu'une nouvelle fenêtre est ouverte. Cependant, je ne connais pas les commandes de shell qui peuvent le faire, (xwininfo vous oblige à choisir une fenêtre) et je vais probablement avoir des tonnes de code HTML possibles dans le html.

La solution possible n ° 2 tourne autour de la création d'un bureau virtuel nu où le logiciel d'intérêt fonctionne comme l'application principale (ne peut pas être minimisé ou fermé et aucune barre de tâches, etc.) et tous les menus contextuels apparaissent au premier plan. Malheureusement, je ne sais pas comment le faire. Je peux me connecter au bureau spécifique en utilisant x-gtk-vnc intégré dans un html aussi.

Quelqu'un pourrait-il me diriger dans la bonne direction avec l'une ou l'autre solution? Personnellement, préférez # 2. D'autres solutions sont également bien accueillies.

La solution 2 sera beaucoup plus facile.

En supposant que vous utilisez le package vnc4viewer inclus avec Ubuntu, modifiez simplement le script ~/.vnc/xstartup pour le compte utilisateur ~/.vnc/xstartup l'utilisateur distant s'exécutera et le remplacer par le contenu suivant:

  #! / Bin / bash

 Function start_and_wait {
     #Pour la ligne de commande du programme que vous devez exécuter ici, suivi d'un
     #ampersand (&).  Par exemple, nous allons commencer gedit:
     Gedit &

     Attendez $!
     Start_and_wait
 }

 [-x / etc / vnc / xstartup] && exec / etc / vnc / xstartup
 [-r $ HOME / .Xresources] && xrdb $ HOME / .Xresources
 Xsetroot-solide gris
 Metacity &
 Start_and_wait 

Cela déclenchera le metacity fenêtres de la metacity de GNOME tout seul, de sorte que les fenêtres contextuelles peuvent être traitées sanely. (Ils peuvent même utiliser Alt + Tab s'ils le doivent.) Bien que l'utilisateur puisse minimiser et redimensionner la fenêtre, il donnera simplement à l'utilisateur un ordinateur portable nu qui ne peut rien faire. Pas de panneau, pas de menus, pas d'icône, rien. Le script va également redémarrer le programme s'il est quitté pour quelque raison que ce soit.

Une fois que vous avez fait cela, il suffit d'allumer vncserver et vous êtes doré. Vous pouvez placer cette commande dans votre fichier /etc/rc.local (ou écrire un fichier approprié) avant la ligne de exit 0 pour que le serveur démarre à chaque démarrage:

 su username -c "vncserver :7" 

Cela démarrera le serveur sur le bureau :7 (port 5907), de sorte que tous les autres serveurs VNC que vous pourriez autrement ne commenceront pas et vous aurez un numéro de bureau prévisible pour mettre dans le fichier HTML.

Assurez-vous d'utiliser un compte d'utilisateur distinct pour l'utilisateur distant qui est suffisamment verrouillé, car même s'ils n'ont qu'un accès à un programme, il existe encore de nombreuses façons d'accéder plus facilement au système. (Boîtes de dialogue de fichier, commandes qui peuvent ouvrir un shell, etc.)

Notez que s'il est possible d'utiliser n'importe quel gestionnaire de fenêtres et que la plupart des gens utiliseraient des simples comme le twm (ou ce que les enfants utilisent ces jours-ci), j'ai collé avec metacity car il est inclus par défaut et pour simplifier les choses.