web-dev-qa-db-fra.com

Exécuter un script bash depuis une xsession pour basculer les programmes de démarrage

J'ai donc un défi intéressant à relever sous Ubuntu 16.04.

J'ai initialement créé un fichier .xsession qui exécutait Exec=google-chrome --kiosk http://some-url.com pour démarrer en tant que périphérique de kiosque.

Le fichier .xsession mentionné ci-dessus existe dans /usr/share/xsessions/ et est défini sur la session par défaut dans le fichier de configuration lightdm disponible à l'emplacement /usr/share/lightdm/lightdm.d.conf/50-ubuntu.conf.

Cela a bien fonctionné.

Sur le nouveau défi:

Je souhaite pouvoir activer/désactiver à distance le démarrage du périphérique en mode kiosque.

Pour tenter de le faire, j'ai modifié la commande Exec afin d'exécuter un script bash que j'ai écrit pour déterminer s'il fallait ou non démarrer en tant que kiosque.

Le script suivant est exécuté à partir du fichier .xsession:

#! /bin/bash

KIOSK_MODE=$(curl http://some-url.com/bootInKioskMode/)

if [ $KIOSK_MODE = "true" ] ; then
    google-chrome --kiosk http://some-url.com
else
    gnome-session --session=ubuntu &
    unity
fi

L'idée est que, parce que je peux contrôler quoi http://some-url.com/bootInKioskMode/ retourne, je devrais être en mesure de basculer en mode dans lequel l'appareil démarre.

Dans l'état actuel des choses, j'ai deux problèmes à résoudre.

  1. Mon instruction if/else correspond toujours à false ... elle ne démarre donc pas en mode kiosque, même si la réponse curl est true.

  2. Lorsqu'il démarre et exécute les commandes après l'instruction else, il ne correspond pas vraiment à un démarrage par défaut. La barre de menus supérieure est manquante, ainsi que les icônes et les options de paramètres en haut à droite de l'écran.

Autres choses à noter:

  • Je sais qu'il est connecté à Internet et que la requête curl se déclenche correctement au cours des tests (sortie et enregistrement dans un fichier).

  • Je l'ai configuré pour se connecter automatiquement à un utilisateur de kiosque qui ne dispose pas des autorisations Sudo et qui a exécuté des tests dans ces conditions.


Toute aide à cet égard est appréciée. À ce stade, j'ai passé des heures à googler et à essayer différentes choses et je n'ai pas encore eu beaucoup de chance.

Merci.

2
camroncade

Re-décompose ton problème. Vous pouvez facilement écrire un script Perl simple pour écouter un port convenu (par exemple, 30201). Voir cet exemple de thegeekstuff.com . Faites en sorte que la partie serveur accepte 3 commandes: "kiosk", "desktop" et "quit". "kiosk" et "desktop" activent/effacent un drapeau comme /var/run/kiosk-mode. Démarrez le serveur dans /etc/init. Ensuite, vous pouvez simplement if [[ -f /var/run/kiosk-mode ]] ; then ... dans votre script.

0
waltinator