Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 20-06-2017 15:32:26

Belfaigore
Membre
Inscription : 12-06-2017

[Résolu] GRUB2-ajouter des entrées (lancement console ou X11 ou autre)

Bonjour,

alors voilà, je me lance dans l'aventure Debian pour me monter un vieux PC (Sempron/4Go/GTX560/2To) sur la télé qui est dans la chambre (je ne regarde la télé commerciale sur cet écran).

Donc ayant entendue parlé de RetroGaming (émulateurs d'ancienne console) et de Kodi (Media Center), je me suis dit, il y peut être moyen dans faire quelque chose.

Maintenant que vous avez l'idée, le cahier des charges :
Mon menu GRUB s'affiche au démarrage et me propose de démarrer '1. Debian 9' ou '2. Autre > pour le Recovery'

Est-ce possible de rajouter dans le Grub :
   (1) Debian 9
        --> Demarrage de Debian 9 sous XFCE (déjà dans le grub)

    2. Kodi
        --> Démarre que kodi si c'est possible sinon XFCE (par exemple) puis kodi

    3. RetroArch / Emulation Station
        --> Démarrer RetroArch si possible sinon XFCE puis RetroArch

    4. Console
        --> On démarre pas X11, un peu comme en mode Recovery mais sauf qu'on est pas en recovery

   (5) Recovery
       --> Console en mode recovery, déjà dans le grub

Je n'ai pas trouvé de tuto très clair sur le GRUB, et encore moins sur les lignes de commande pour démarrer Debian et pour certain cas, avec des particularité.

Dernière modification par Belfaigore (27-06-2017 14:21:58)

Hors ligne

#2 20-06-2017 15:46:04

daufinsyd
Membre
Lieu : 68, 63, Karlsruhe
Distrib. : Manjaro + Debian Stable + Xubuntu
Noyau : Linux 4.9-amd64
(G)UI : Plasma 5.10
Inscription : 02-02-2013
Site Web

Re : [Résolu] GRUB2-ajouter des entrées (lancement console ou X11 ou autre)

Salut smile


Si tu installes une distrib spéciale pour Kodi (genre LibreElec) et une autre pour RetroArch ça sera fait automatiquement.

Pour l'option 4 il te suffit de créer une deuxième entrée de Debian par exemple, en ajoutant single à la ligne GRUB_CMDLINE_LINUX_DEFAULT

Tu peux te renseigner sur le wiki pour ce qu'il y a, notamment https://debian-facile.org/doc:systeme:n … b2-modules

Dernière modification par daufinsyd (20-06-2017 15:48:24)


Aspire V3-772G + SSD 850Evo
Intel i7-4790 - 12Go RAM - GTX460
Intel i7-6700 - 8Go RAM - AMD R9 280X 3Go - SSD 850Evo
Odroid C2, Raspberry Pi Zero

Hors ligne

#3 20-06-2017 15:57:47

Belfaigore
Membre
Inscription : 12-06-2017

Re : [Résolu] GRUB2-ajouter des entrées (lancement console ou X11 ou autre)

Oui effectivement le principe est simple ; un peu comme si on voulait installer Windows + Debian + MacOs sur un PC par exemple ... je retiens l'idée.

Le truc que je pensais était plutôt d'utiliser la même installation afin de garder les mêmes programme de fond (SSH, WebServer, Samba)

Maintenant, je me demande s'il n'y a pas moyen avec un bon partitionnement d'avoir par exemple 3 distribs (Debian/XFCE, RetroArch, LibreElec) qui utilisent les mêmes partition /usr /home /var /tmp /boot, etc ???

L'objectif étant, s'il n'est pas possible d'avoir une même distrib, de factoriser les applications serveurs et ce qui tourne en fond avec les dossiers \Home

J'espère être clair

Hors ligne

#4 20-06-2017 16:07:15

daufinsyd
Membre
Lieu : 68, 63, Karlsruhe
Distrib. : Manjaro + Debian Stable + Xubuntu
Noyau : Linux 4.9-amd64
(G)UI : Plasma 5.10
Inscription : 02-02-2013
Site Web

Re : [Résolu] GRUB2-ajouter des entrées (lancement console ou X11 ou autre)

Belfaigore a écrit :

Oui effectivement le principe est simple ; un peu comme si on voulait installer Windows + Debian + MacOs sur un PC par exemple ... je retiens l'idée.



excactement smile

GRUB est "juste" un chargeur d'amorçage, ce n'est pas possible (à ma connaissance). Cela dit on peut imaginer proposer un menu lancé une fois le système booté qui te demanderait quel mode lancer (ou bien utiliser 3 sessions différentes qui lors de la connexion lancent chacune un des logiciels).

C'est possible pour /home, /boot et sans doute /tmp mais c'est tout. Si tu installes trois distribs avec la même racine elles vont se marcher dessus lol


Aspire V3-772G + SSD 850Evo
Intel i7-4790 - 12Go RAM - GTX460
Intel i7-6700 - 8Go RAM - AMD R9 280X 3Go - SSD 850Evo
Odroid C2, Raspberry Pi Zero

Hors ligne

#5 20-06-2017 16:19:14

Belfaigore
Membre
Inscription : 12-06-2017

Re : [Résolu] GRUB2-ajouter des entrées (lancement console ou X11 ou autre)

OK merci pour les idées en compilant tes infos, je vais faire du GRUB et de la session, je penses que mes besoins pourront être satisfait de la manière suivante :

Dans le Grub, ajouter l'entrée pour le mode console de façon à avoir :
   1. Debian sous XFCE
   2. Debian console
   3. Debian recovery

En mode Debian XFCE, dans l’écran de login, afficher les différents utilisateurs parmi
   1. Moi même (+password)
       --> Utilisation bureautique ou autre
   2. Media Center (sans mot de passe)
       --> Lancement de Kodi
   3. Console Retro (sans mot de passe)
       --> Lancement de RetroArch ou EmulationStation

Avec un beau thème et de jolie icon de session, je pense que ça va le faire, je vais peut être, par-contre, voir pour remplacer LightDM, pour un gestionnaire d'ouverture plus esthétique en vue de ce que je cherche à produire ; SDDM me semble intéressant.

Hors ligne

#6 20-06-2017 17:15:06

daufinsyd
Membre
Lieu : 68, 63, Karlsruhe
Distrib. : Manjaro + Debian Stable + Xubuntu
Noyau : Linux 4.9-amd64
(G)UI : Plasma 5.10
Inscription : 02-02-2013
Site Web

Re : [Résolu] GRUB2-ajouter des entrées (lancement console ou X11 ou autre)

Nickel smile

Belfaigore a écrit :

SDDM me semble intéressant


Il vraiment joli ( et personnalisable !  )
d'ailleurs je viens à l'instant de lui faire une page dans le wiki big_smile


Aspire V3-772G + SSD 850Evo
Intel i7-4790 - 12Go RAM - GTX460
Intel i7-6700 - 8Go RAM - AMD R9 280X 3Go - SSD 850Evo
Odroid C2, Raspberry Pi Zero

Hors ligne

#7 20-06-2017 21:20:14

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] GRUB2-ajouter des entrées (lancement console ou X11 ou autre)

daufinsyd a écrit :

GRUB est "juste" un chargeur d'amorçage, ce n'est pas possible (à ma connaissance).


GRUB peut passer des options à la ligne de commande du noyau.
Traditionnellement (avant systemd), on pouvait passer le runlevel dans lequel on voulait démarrer le système, et chaque runlevel démarrait un ensemble de services. Dans certaines distributions (pas Debian), il y avait un runlevel pour le démarrage en mode graphique et un autre pour le démarrage en console.
Je n'ai pas regardé de près, mais il doit y avoir l'équivalent de tout cela dans systemd.
Par contre la génération automatique des entrées de menu supplémentaires par les scripts de /etc/grub.d/ ne va pas être de la tarte.

(Partitions communes à plusieurs installations)

daufinsyd a écrit :

C'est possible pour /home, /boot et sans doute /tmp mais c'est tout.


Je déconseille fortement le partage de /boot entre plusieurs installations. C'est un coup à perturber GRUB.

Dernière modification par raleur (20-06-2017 21:21:35)

Hors ligne

#8 20-06-2017 22:11:56

daufinsyd
Membre
Lieu : 68, 63, Karlsruhe
Distrib. : Manjaro + Debian Stable + Xubuntu
Noyau : Linux 4.9-amd64
(G)UI : Plasma 5.10
Inscription : 02-02-2013
Site Web

Re : [Résolu] GRUB2-ajouter des entrées (lancement console ou X11 ou autre)

raleur a écrit :

Je n'ai pas regardé de près, mais il doit y avoir l'équivalent de tout cela dans systemd.



Ha oui autant pour moi ! Ce sont les target sous systemd.


Aspire V3-772G + SSD 850Evo
Intel i7-4790 - 12Go RAM - GTX460
Intel i7-6700 - 8Go RAM - AMD R9 280X 3Go - SSD 850Evo
Odroid C2, Raspberry Pi Zero

Hors ligne

#9 21-06-2017 14:02:12

Belfaigore
Membre
Inscription : 12-06-2017

Re : [Résolu] GRUB2-ajouter des entrées (lancement console ou X11 ou autre)

Pour la partie GRUB, j'ai éditer les 'menuentry' du '/boot/grub/grub.cfg' ; les 3 entrées fonctionnes, mais mon 'single' pour la console me la démarre le recovery ; je me demande s'il n'y a pas un 'if single then recovery' qqpart.

Question bonus, comment puis faire pour avoir ce résultat du grub.cfg après un update-grub (j'ai regardé un peu les fichiers dans /etc/grub.d/XX_...) mais ça m'a l'air bien plus compliqué notamment pour changer les libellés

bootloader
grub.cfg
Demarrage console

Dernière modification par Belfaigore (21-06-2017 14:20:45)

Hors ligne

#10 21-06-2017 14:34:50

daufinsyd
Membre
Lieu : 68, 63, Karlsruhe
Distrib. : Manjaro + Debian Stable + Xubuntu
Noyau : Linux 4.9-amd64
(G)UI : Plasma 5.10
Inscription : 02-02-2013
Site Web

Re : [Résolu] GRUB2-ajouter des entrées (lancement console ou X11 ou autre)

En ajoutant single tu bootes dans le runlevel 1 (single-user). Je suppose que tu veux booter dans le runlevel 3 (multi-user + internet mais sans Display Manager).

Pour systemd il faut ajouter systemd.unit=multi-user.target au lieu de single
(je ne suis pas sûr, je vérifie ça tout à l'heure)

Aspire V3-772G + SSD 850Evo
Intel i7-4790 - 12Go RAM - GTX460
Intel i7-6700 - 8Go RAM - AMD R9 280X 3Go - SSD 850Evo
Odroid C2, Raspberry Pi Zero

Hors ligne

#11 21-06-2017 15:19:17

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] GRUB2-ajouter des entrées (lancement console ou X11 ou autre)

Les modifications directes du fichier /boot/grub/grub.cfg seront écrasées à la prochaine exécution de update-grub.

Pour que ce soit update-grub qui crée ces entrées de menu, il faut modifier (ou dupliquer et modifier les copies) /etc/grub.d/10_linux.

Hors ligne

#12 21-06-2017 15:22:07

Belfaigore
Membre
Inscription : 12-06-2017

Re : [Résolu] GRUB2-ajouter des entrées (lancement console ou X11 ou autre)

raleur a écrit :

Les modifications directes du fichier /boot/grub/grub.cfg seront écrasées à la prochaine exécution de update-grub.

Pour que ce soit update-grub qui crée ces entrées de menu, il faut modifier (ou dupliquer et modifier les copies) /etc/grub.d/10_linux.


ça confirme ce que je pensais, mais j'ai regarder le '10_linux', c'est nettement moins simple a comprendre que le grub.cfg, je ne trouve pas comment renommer l'entrée, ni comment organiser le menu sans sous menu, juste avec 3 entrées, ni comment il gère le recovery

Hors ligne

#13 21-06-2017 16:01:19

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] GRUB2-ajouter des entrées (lancement console ou X11 ou autre)

Le fichier 10_linux est un script dont la sortie génère la partie du fichier grub.cfg relative aux entrées de menu de ce système.
Il faut donc rechercher les commandes qui génèrent les éléments que tu veux modifier.

Pour ne pas générer de sous-menu avec update-grub, il faut ajouter/décommenter l'option

GRUB_DISABLE_SUBMENU=y


dans le fichier /etc/default/grub.
Toutes les entrées qui étaient dans un sous-menu (normal, dépannage et toutes les versions de noyau) seront directement dans le menu principal.

L'entrée dépannage/recovery (avec le paramètre "single" dans la ligne de commande du noyau) est générée si l'option

GRUB_DISABLE_RECOVERY=true


du même fichier est absente ou commentée.

Source : https://www.gnu.org/software/grub/manual/grub.html

Note : Il y a une certaine confusion sur la valeur à donner aux variables booléennes du fichier /etc/default/grub. Parfois "true", parfois "y"... Si cela ne fonctionne pas avec l'une malgré ce que dit la documentation, essaye avec l'autre.

Dernière modification par raleur (21-06-2017 16:05:04)

Hors ligne

#14 21-06-2017 17:43:58

Belfaigore
Membre
Inscription : 12-06-2017

Re : [Résolu] GRUB2-ajouter des entrées (lancement console ou X11 ou autre)

Merci à tous, j'ai pu lui régler son compte à GRUB2 ; bon je me suis quand même lancé dans la lecture pationnante du fichier '/etc/grub.d/10_linux', ouvrage interessant, un peu compliquer à comprendre (j'ai pas tout compris) ; mais on cerne l'essentiel.

Donc pour ceux que ça intéresse voici les modifications que j'ai apportées pour avoir un mode console, pas de sous-menu et bonus, le GRUB qui ne s'affiche que si [Shift] et appuyée

         A) D'abord modification du fichier '/etc/grub.d/10_linux'
                1. Variabiliser la ligne de commande en ajoutant la variable GRUB_CMDLINE_LINUX_CONSOLE en début de fichier (ligne 28)

20. prefix="/usr"
21. exec_prefix="/usr"
22. datarootdir="/usr/share"
23. ubuntu_recovery="0"
24. quiet_boot="0"
25. quick_boot="0"
26. gfxpayload_dynamic="0"
27. vt_handoff="0"
28. GRUB_CMDLINE_LINUX_CONSOLE=systemd.unit=multi-user.target
29.
30. . "$pkgdatadir/grub-mkconfig_lib"


                2. Dans la suite du fichier, le libellé de l'OS (je veux pas afficher la version de linux, juste Debian) j'ai mis en commentaire les lignes 41,42,44-48

38. if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
39.  OS=GNU/Linux
40. else
41. #  case ${GRUB_DISTRIBUTOR} in
42. #    Ubuntu|Kubuntu)
43.       OS="${GRUB_DISTRIBUTOR}"
44. #      ;;
45. #    *)
46. #      OS="${GRUB_DISTRIBUTOR} GNU/Linux"
47. #      ;;
48. #  esac
49.   CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"
50. fi


                3. Modification de la fonction 'linux_entry()' dont le rôle est de produire, les entrées affichées dans le GRUB, le paramètre $3 correspondant au type nous interresse il informe la méthode s'il s'agit d'une entrée simple ou recovery ... et si on lui ajouter le mode 'console' ; la méthode génére également les libellés ; j'ai mis en commentaire les anciens codes (lignes 124, 127, 130 + commentaire en 112)

108. linux_entry ()
109. {
110.   os="$1"
111.   version="$2"
112.   #type is single, recovery, console
113.   type="$3"
114.   args="$4"
115.
116.   if [ -z "$boot_device_id" ]; then
117.       boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
118.   fi
119.   if [ x$type != xsimple ] ; then
120.       case $type in
121.           console)
122.        title="$(gettext_printf "%s (console)" "${os}")";;
123.    recovery)
124. #        title="$(gettext_printf "%s, with Linux %s (%s)" "${os}" "${version}" "$(gettext "${GRUB_RECOVERY_TITLE}")")" ;;
125.        title="$(gettext_printf "%s (%s)" "${os}" "$(gettext "${GRUB_RECOVERY_TITLE}")")";;
126.    init-*)
127. #        title="$(gettext_printf "%s, with Linux %s (%s)" "${os}" "${version}" "${type#init-}")" ;;
128.               title="$(gettext_printf "%s (%s)" "${os}" "${type#init-}")" ;;
129.    *)
130. #        title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")" ;;
131.               title="$(gettext_printf "%s" "${os}")" ;;


                4. Le reste se passe en fin de fichier, quand le script crée les entrées du menu GRUB, l'idée étant de reprendre le principe du recovery (avec desactivation), et de placer la console au dessus (dans le menu) , donc on va utiliser une variable 'GRUB_DISABLE_CONSOLE' qu'on mettra dans le /etc/default/grub si on veut pas la console et pour l'entrée, on utilisera la variable qu'on a crée plus haut (j'ai ajouter les lignes 364-367)

341.  if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then
342.     linux_entry "${OS}" "${version}" simple \
343.     "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
344.
345.     submenu_indentation="$grub_tab"
346.    
347.     if [ -z "$boot_device_id" ]; then
348.  boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
349.     fi
350.     # TRANSLATORS: %s is replaced with an OS name
351.     echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
352.     is_top_level=false
353.   fi
354.
355.   linux_entry "${OS}" "${version}" advanced \
356.               "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
357.   for supported_init in ${SUPPORTED_INITS}; do
358.     init_path="${supported_init#*:}"
359.     if [ -x "${init_path}" ] && [ "$(readlink -f /sbin/init)" != "${init_path}" ]; then
360.       linux_entry "${OS}" "${version}" "init-${supported_init%%:*}" \
361.      "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} init=${init_path}"
362.     fi
363.   done
364.   if [ "x${GRUB_DISABLE_CONSOLE}" != "xtrue" ]; then
365.     linux_entry "${OS}" "${version}" console \
366.                 "${GRUB_CMDLINE_LINUX_CONSOLE} ${GRUB_CMDLINE_LINUX}"
367.   fi
368.   if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
369.     linux_entry "${OS}" "${version}" recovery \
370.                 "${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}"
371.   fi
372.
373.
374.   list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '`
375. done


                5. Voilà, j'aurai pu m’arrêter là, mais "qu'y-t-a" flinguer une après-midi par 37°C autant aller au bout de ce que je veut faire, a savoir, n'afficher le GRUB que si [Shift] est appuyé, donc mise en place d'un fichier /etc/grub.d/50_hidemenu

touch /etc/grub.d/50_hidemenu
chmod +x /etc/grub.d/50_hidemenu

merci au post de 'tux1c' sur askubuntu https://askubuntu.com/questions/117525/ … his-happen

#!/bin/bash
cat <<EOF
if [ "x\${timeout}" != "x-1" ]; then
  if keystatus; then
    if keystatus --shift; then
      set timeout=-1
    else
      set timeout=0
    fi
  else
    if sleep --interruptible ${GRUB_HIDDEN_TIMEOUT}; then
      set timeout=0
    fi
  fi
fi
EOF


                6. Et voilà plus qu'a mettre à jour /etc/default/grub et faire un 'update-grub' et le tour est joué

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT=5
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_DISABLE_SUBMENU=y
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""

[...]

# Uncomment to disable generation of console mode menu entries
#GRUB_DISABLE_CONSOLE="true" && export GRUB_DISABLE_CONSOLE

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"


Et pour reprendre une réplique de "Le coeur à ses raisons - scene de Beky avec le téléphone" ... "Et ben voilà, c'était pas si compliqué".

Bon pour ceux qui souhaite refaire mes manipulation ... j'espère que je n'ai rien oublié dans ce post ... sinon dommage pour vous, car chez moi ça marche bien smile

Hors ligne

Pied de page des forums