Ne pas cliquer
Parrain-Linux
utilise Linux (si, si, c'est bien vrai)
Écrire un nouveau message
Page : 1
Script d'installation Linux Kiosk Mode
Avatar
Tekkharibo
utilisateur
Parrain
Inscrit le : 29/10/2013
Messages : 240
Point(s) : 3878
Distribution : Debian ArchLinux
Localisation :
Albi, Tarn, France
Posté le 29/09/2020 à 12:23:27
Citer

Bonjour à tous,

Je vous partage mon script d'installation (remodifier pour pouvoir le partager) basé sur un Raspberry pi et Ubuntu 20.04 pour créer un linux en mode kiosk, à utiliser avec un écran tactile par exemple

J'ai créer ce script pour me facilité mes installations en mode kiosk avec un pc ou un RPi, c'est le plus simple que j'ai trouvé, plutôt que de prendre des images toute faites, j'ai également tester ce script avec des application en fullscreen et ca marche aussi

ce script intervient après une installation d'ubuntu en mode server (sans interface graphique) ou après une installation de Raspbian Lite

Explication du scirpt : 
- Définition des couleurs pour l'affichage sur le terminal
- Test si lancé en sudo
- Test si connecté à internet
- Exemple de question
- Exemple de saisie avec l'adresse IP
- Question si installation sur RPi
- Config des users, groupes, dossiers d'installation de l'application. log et tmp
- Créer le fichier de log
- Créer les utilisateurs si besoin et groupes
- Mets le système à jour
- Install Xorg, PulseAudio, OpenBox (gestionnaire de fenetres), Chromium, wget, curl, htop, ftp, ZSH (et le fichier de config ZSH GRML)
- Configure une IP static
- Configure le démarage automatique et dans ce cas le lancement de chromium en mode kiosk, sans les infobars, sans zoom, en navigateur privée, sans historique, sans le menu contextuel (click droit) et sans historique
- Configure l'autologin et retire le curseur
- Install l'application (fonction en début de fichier à remplir)

la fonction ftp_dowload permet de télécharger un fichier en FTP

La où il y a des éléments à modifier (tout peu aussi être modifié) sont notés "#TODO:"

Si vous avez des questions sur ce script n'hésitez pas ;) 

Code:

#!/bin/bash

## Fonctions

function ftp_download() {
HOST=hostname #TODO: changer
LOGIN=user #TODO: changer
PASSWORD="password" #TODO: changer
PORT=21

# le transfert lui même
ftp -i -n $HOST $PORT <<END_SCRIPT
quote USER $LOGIN
quote PASS $PASSWORD
pwd
bin
mget $1
quit
END_SCRIPT
}

function install_app() { #TODO: ajouter process d'installation

echo "=====================================" | tee -a $installLogFile
}

## Définition des couleurs
red=$'e[1;31m'
green=$'e[1;32m'
blue=$'e[1;34m'
magenta=$'e[1;35m'
cyan=$'e[1;36m'
white=$'e[0m'

## Try if root access
if [ "$EUID" -ne 0 ]; then
echo $red"Merci d'utiliser la commande sudo"$white
exit
fi

echo -e "GET http://google.com HTTP/1.0nn" | nc google.com 80 >/dev/null 2>&1

if [ $? -eq 0 ]; then
echo $green"Connexion internet OK"$white
else
echo $red"Merci de vous connecter à internet pour executer ce script"$white
exit
fi

response=0
#TODO: changer
while true; do
echo "question ?"
echo "y: Oui"
echo "n: Non"
read -p "Réponse : " yn
case $yn in
y | Y)
response=1
break
;;
n | N)
response=0
break
;;
*) echo "Répondre y ou n" ;;
esac
done

#TODO: changer
ip=localhost
echo "Quel est l'adresse IP"
read varIp
ip=$varIp

pi=0
while true; do
echo "Est-ce que c'est l'installation pour un raspberry pi ?"
echo "y: Oui"
echo "n: Non"
read -p "Réponse : " yn
case $yn in
y | Y)
pi=1
break
;;
n | N)
pi=0
break
;;
*) echo "Répondre y ou n" ;;
esac
done

type=0



## shell config
user=user #TODO: changer
group=group #TODO: changer

if [ $pi -eq 1 ]; then
user=pi
group=pi
fi

dirHome=/home/$user
dirAppInstall=/home/$user/path #TODO: changer
dirLogFile=/home/$user/path #TODO: changer
dirTmp=/tmp

## definition fichier de log d'installation
installLogFile=$dirTmp/install.log

rm -f $installLogFile

echo $red"fichier de log : "$installLogFile$white

echo $green"Déplacement dans le dossier /tmp"$white | tee $installLogFile
pushd /tmp
echo "=====================================" | tee -a $installLogFile

## Création du groupe et de l'utilisateur
echo $green"Création du groupe $group"$white | tee $installLogFile
if grep -q $group /etc/group; then
echo $cyan"Le groupe existe déjà"$white | tee $installLogFile
else
groupadd $group
fi
echo "=====================================" | tee -a $installLogFile
echo $green"Création de l'utilisateur $user"$white | tee $installLogFile
if grep -q $user /etc/passwd; then
echo $cyan"L'utilisateur existe déjà"$white | tee $installLogFile
else
adduser $user $group
fi
echo "=====================================" | tee -a $installLogFile

## Installation outils
echo $green"Mise à jour"$white | tee -a $installLogFile
apt-get update >>$installLogFile
apt-get upgrade -y >>$installLogFile
echo "=====================================" | tee -a $installLogFile

echo $green"Installation Xorg"$white | tee -a $installLogFile
if ! [ -x "$(dpkg -l | grep xserver-xorg-core)" ]; then
echo $red"Xorg n'est pas installé"$white | tee -a $installLogFile
echo $green"Installation Xorg"$white | tee -a $installLogFile
apt-get install -y --no-install-recommends xserver-xorg x11-xserver-utils xinit >>$installLogFile
fi
echo "=====================================" | tee -a $installLogFile

echo $green"Installation pulseaudio"$white | tee -a $installLogFile
if ! [ -x "$(command -v pulseaudio)" ]; then
echo $red"Pulseaudio n'est pas installé"$white | tee -a $installLogFile
echo $green"Installation pulseaudio"$white | tee -a $installLogFile
apt-get install -y --no-install-recommends pulseaudio >>$installLogFile
fi
echo "=====================================" | tee -a $installLogFile

echo $green"Installation openbox"$white | tee -a $installLogFile
if ! [ -x "$(command -v openbox)" ]; then
echo $red"Openbox n'est pas installé"$white | tee -a $installLogFile
echo $green"Installation openbox"$white | tee -a $installLogFile
apt-get install -y --no-install-recommends openbox >>$installLogFile
fi
echo "=====================================" | tee -a $installLogFile

#TODO: changer si pas besoin de chrome
echo $green"Installation de chromium"$white | tee -a $installLogFile
if ! [ -x "$(command -v chromium)" ]; then
echo $red"Chromium n'est pas installé"$white | tee -a $installLogFile
echo $green"Installation chromium"$white | tee -a $installLogFile
apt-get install -y --no-install-recommends chromium-browser >>$installLogFile
fi
echo "=====================================" | tee -a $installLogFile

echo $green"Installation de wget"$white | tee -a $installLogFile
if ! [ -x "$(command -v wget)" ]; then
echo $red"wget n'est pas installé"$white | tee -a $installLogFile
echo $green"Installation wget"$white | tee -a $installLogFile
apt-get install -y --no-install-recommends wget >>$installLogFile
fi
echo "=====================================" | tee -a $installLogFile

echo $green"Installation de curl"$white | tee -a $installLogFile
if ! [ -x "$(command -v curl)" ]; then
echo $red"curl n'est pas installé"$white | tee -a $installLogFile
echo $green"Installation curl"$white | tee -a $installLogFile
apt-get install -y --no-install-recommends curl >>$installLogFile
fi
echo "=====================================" | tee -a $installLogFile

#TODO: changer si pas besoin htop
echo $green"Installation de htop"$white | tee -a $installLogFile
if ! [ -x "$(command -v htop)" ]; then
echo $red"htop n'est pas installé"$white | tee -a $installLogFile
echo $green"Installation htop"$white | tee -a $installLogFile
apt-get install -y --no-install-recommends htop >>$installLogFile
fi
echo "=====================================" | tee -a $installLogFile

echo $green"Installation de ftp"$white | tee -a $installLogFile
if ! [ -x "$(command -v ftp)" ]; then
echo $red"ftp n'est pas installé"$white | tee -a $installLogFile
echo $green"Installation ftp"$white | tee -a $installLogFile
apt-get install -y --no-install-recommends ftp >>$installLogFile
fi
echo "=====================================" | tee -a $installLogFile

#TODO: changer si tu n'aimes pas ZSH
echo $green"Installation de ZSH"$white | tee -a $installLogFile
if ! [ -x "$(command -v zsh)" ]; then
echo $red"ZSH n'est pas installé"$white | tee -a $installLogFile
echo $green"Installation ZSH"$white | tee -a $installLogFile
apt-get install -y --no-install-recommends zsh >>$installLogFile
fi

wget -q -O $dirHome/.zshrc https://git.grml.org/f/grml-etc-core/etc/zsh/zshrc
wget -q -O /root/.zshrc https://git.grml.org/f/grml-etc-core/etc/zsh/zshrc

chsh -s /bin/zsh $user
chown $user:$group $dirHome/.zshrc
chsh -s /bin/zsh root
echo "=====================================" | tee -a $installLogFile


## Configuration réseau

#TODO: changer en fonction des besoins

echo $green"Configuration réseau"$white | tee -a $installLogFile

interface=$(ip link | awk -F: '$0 !~ "lo|vir|wl|^[^0-9]"{print $2;getline}')
#TODO: changer
ipadress=192.168.1.2
mask=255.255.255.0
gateway=192.168.1.254
dns=9.9.9.9

# TODO: config pour RPi
# echo "" >>/etc/network/interfaces
# echo "## Configuration de $interface en mode Statique" >>/etc/network/interfaces
# echo "auto $interface " >>/etc/network/interfaces
# echo "iface $interface inet static" >>/etc/network/interfaces
# echo " address $ipadress" >>/etc/network/interfaces
# echo " netmask $mask" >>/etc/network/interfaces
# echo " gateway $gateway" >>/etc/network/interfaces
# echo " dns-nameservers $dns" >>/etc/network/interfaces

# echo $nameserver >>/etc/resolv.conf
#TODO: config pour Ubuntu 20.04
echo ""
echo "network:" >>/etc/netplan/enp2s0.yaml
echo " ethernets:" >>/etc/netplan/enp2s0.yaml
echo " $interface:" >>/etc/netplan/enp2s0.yaml
echo " addresses: [$ipadress/24]" >>/etc/netplan/enp2s0.yaml
echo " gateway4: $gateway" >>/etc/netplan/enp2s0.yaml
echo " nameservers:" >>/etc/netplan/enp2s0.yaml
echo " addresses: [$gateway]" >>/etc/netplan/enp2s0.yaml
echo " dhcp4: false" >>/etc/netplan/enp2s0.yaml
echo " dhcp6: false" >>/etc/netplan/enp2s0.yaml
echo " version: 2" >>/etc/netplan/enp2s0.yaml

netplan apply
systemctl restart systemd-networkd

echo "=====================================" | tee -a $installLogFile

## Configuration Demarrage auto
echo $green"Configuration du démarrage automatique"$white | tee -a $installLogFile

echo -e "# Disable any form of screen saver / screen blanking / power management" >autostart.tmp
echo -e "xset s off" >>autostart.tmp
echo -e "xset s noblank" >>autostart.tmp
echo -e "xset -dpms" >>autostart.tmp

echo -e "# Allow quitting the X server with CTRL-ATL-Backspace" >>autostart.tmp
echo -e "setxkbmap -option terminate:ctrl_alt_bksp" >>autostart.tmp

#TODO: changer si pas par chrome et ajouter la ligne de commande de l'application en mode kiosk
echo -e "# Start Chromium in kiosk mode" >>autostart.tmp
echo -e "sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' ~/.config/chromium/'Local State'" >>autostart.tmp
echo -e "sed -i 's/"exited_cleanly":false/"exited_cleanly":true/; s/"exit_type":"[^"]+"/"exit_type":"Normal"/' ~/.config/chromium/Default/Preferences" >>autostart.tmp
echo -e "chromium-browser --disable-infobars --kiosk --disable-pinch --no-context-menu --no-first-run --incognito --overscroll-history-navigation=0 'http://url'" >>autostart.tmp #TODO: changer

mv autostart.tmp /etc/xdg/openbox/autostart
echo "=====================================" | tee -a $installLogFile

## Autologin
#TODO: changer si tu choisis bash remplacer .zprofile par .bash_profile
echo $green"Autologin"$white | tee -a $installLogFile
mkdir -p /etc/systemd/system/getty@tty1.service.d
echo "[Service]" >/etc/systemd/system/getty@tty1.service.d/override.conf
echo "ExecStart=" >>/etc/systemd/system/getty@tty1.service.d/override.conf
echo "ExecStart=-/sbin/agetty --autologin $user --noclear %I 38400 linux" >>/etc/systemd/system/getty@tty1.service.d/override.conf
systemctl enable getty@tty1.service
echo "=====================================" | tee -a $installLogFile

echo $green"Auto startx"$white | tee -a $installLogFile
echo "if systemctl -q is-active graphical.target && [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then" >$dirHome/.zprofile
echo "exec startx -- -nocursor" >>$dirHome/.zprofile
echo "fi" >>$dirHome/.zprofile
chown $user:$group $dirHome/.zprofile
echo "=====================================" | tee -a $installLogFile

## Installation de l'application
install_app #TODO: changer en fonction de la fonction

while true; do
echo "Est-ce que vous voulez redémarrer ?"
echo "y: Oui"
echo "n: Non"
read -p "Réponse : " yn
case $yn in
y | Y)
reboot
break
;;
n | N)
break
;;
*) echo "Répondre y ou n" ;;
esac
done

Dernière édition le 29/09/2020 à 12:24:43
_________________
HP EliteBook 8560p i7 2.8Ghz Ubuntu 20.04
RPi 4 2Go raspbian Domoticz
RPi 2 Octopi et Anet A8
Souris: RAT 7
Clavier: KBTalking Pure PRO 60% Black/Green

Mon Twitter
Mon hébergeur : 
PlanetHoster

Tu es nouveau et tu n'as pas encore fait ta présentation, va la faire on aime bien savoir des choses sur toi comme ou tu viens pourquoi tu es venu sur PL et sur Linux bien sur ;)

Pas de support par MP

Il me manque des accents quand je te réponds ? C'est juste que je suis en QWERTY et que je suis pas passé en US international #flemme
http://www.parrain-linux.com/promotion.php?image=PL-user.png&membre=tekkharibo
Remonter Descendre Permalien du message
Écrire un nouveau message
Page : 1
Page générée en 0.0704 seconde(s).