Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/12/2006, à 23:27

atlas95

[multiboot]Redémarrer sous l'OS que vous voulez

Ce tuto prendra pour exemple le mien, c'est à dire je vais créer un lanceur pour redémarrer sous windows xp .

Prérequis : grub et un doigt pour tapper au moin.

Dans le haut de fichier menu.lst

sudo gedit /boot/grub/menu.lst

chercher :

# You can specify 'saved' instead of a number. In this case, the default entry
# is the entry saved with the command 'savedefault'.
# WARNING: If you are using dmraid do not change this entry to 'saved' or your
# array will desync and will not let you boot your system.
default 0

Et le changer par:

# You can specify 'saved' instead of a number. In this case, the default entry
# is the entry saved with the command 'savedefault'.
# WARNING: If you are using dmraid do not change this entry to 'saved' or your
# array will desync and will not let you boot your system.
default saved

Mettre timeout à 4 seconde par exemple aussi.

## timeout sec
# Set a timeout, in SEC seconds, before automatically booting the default entry
# (normally the first entry defined).
timeout		4

S'assurer que la section concernant windows xp est comme ceci:

title        Microsoft Windows XP Professionnel
root        (hd0,0)
savedefault    0
makeactive
chainloader    +1

Ensuite compter en quel position est votre windows dans le fichier menu.lst, par exemple moi il était en 4eme position (on ne compte pas la ligne de séparation des système linux et windows)

Exemple mon grub ressemble a ça au démarrage en gros:

Ubuntu   <== 1
Ubuntu safe
Memtest  <== 3
Other blabla(ligne de séparation)
Windows XP <== 4

Donc on retient 4.

Ensuite on créer le script pour redémarrer:

sudo gedit /usr/local/bin/windows

#!/bin/bash
gksudo grub-set-default 4 ##ligne du système que l'on veut démarrer
gksudo reboot

On met les droit d'excecution

sudo chmod +x /usr/local/bin/windows

Ensuite créer un lanceur ou vous voulez avec l'icône que vous voulez avec comme commande : windows
Ou le lancer direct dans un terminal

Voila, si c'est pas clair dites le moi, je suis créver là et ....

Bonne chance

edit: Vous pourrez créer un lancer pour memtest par exemple mais comment faire si je veux cacher la  ligne de memtest du menu grub? Une idée?

Dernière modification par atlas95 (Le 07/12/2006, à 08:23)


Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net

Hors ligne

#2 Le 06/12/2006, à 23:54

naholyr

Re : [multiboot]Redémarrer sous l'OS que vous voulez

Sauf qu'avec ça, à chaque prochain redémarrage il restera sur Windows, et pas juste une fois sad

Hors ligne

#3 Le 07/12/2006, à 00:01

lagnole

Re : [multiboot]Redémarrer sous l'OS que vous voulez

Exact, pour changer cela, il faut modifier

title		Microsoft Windows XP Professionnel
root		(hd0,0)
savedefault	
makeactive
chainloader	+1

en :

title		Microsoft Windows XP Professionnel
root		(hd0,0)
savedefault	0
makeactive
chainloader	+1

Et remplacer le 0 de savedefault 0 par le numero d'entrée d'ubuntu dans votre Grub...

Dernière modification par lagnole (Le 07/12/2006, à 00:02)

Hors ligne

#4 Le 07/12/2006, à 00:12

naholyr

Re : [multiboot]Redémarrer sous l'OS que vous voulez

Bien vu wink

Hors ligne

#5 Le 07/12/2006, à 00:45

misteraph

Re : [multiboot]Redémarrer sous l'OS que vous voulez

exact.
je connaissais pas cette astuce.
Perso j'aurai creer 2 menu.lst et un batch qui remet à 0 une fois que windows est lancé.

Par contre comment faire pour que n'execution du script ne demande pas de mot de passe ?

Hors ligne

#6 Le 07/12/2006, à 01:18

naholyr

Re : [multiboot]Redémarrer sous l'OS que vous voulez

@misteraph : tu peux créer un lanceur qui fait "sudo tonscript" et placer "tonscript" comme ne nécessitant pas de mot de passe dans sudoers. Ou placer directement les commandes reboot et grub-set-default dans sudoers.

P.S: je prépare une interface graphique pour automatiser tout ça avec zenity et dash.

Dernière modification par naholyr (Le 07/12/2006, à 01:18)

Hors ligne

#7 Le 07/12/2006, à 01:19

amkoolgarst

Re : [multiboot]Redémarrer sous l'OS que vous voulez

Bonsoir,

je me demandais si ça pouvait "coller" avec GAG et grub sur ma partition?

Merci!


Jifya moja haliinjiki chungu.
In girum imus nocte, ecce, et consumimur igni.

Hors ligne

#8 Le 07/12/2006, à 03:28

naholyr

Re : [multiboot]Redémarrer sous l'OS que vous voulez

J'ai écrit un petit script (une centaine de lignes) pour automatiser cette astuce. Si vous lancez directement le script vous serez guidé par une interface graphique, mais il est possible de forcer tout ou partie des options par les arguments de la ligne de commande.

Les fonctionnalités intéressantes du script
- correction automatique du fichier menu.lst pour permettre l'utilisation de cette méthode
correction-menu.png
- affichage de la liste des entrées du fichier menu.lst pour le choix du système
choix-systeme.png

Fichiers
Le script : http://naholyr.free.fr/ubuntu/edgy/reboot-system/reboot-system.sh
Une icone représentant un pc/Windows (pour le lanceur) : http://naholyr.free.fr/ubuntu/edgy/reboot-system/windows.xpm

Installation

wget http://naholyr.free.fr/ubuntu/edgy/reboot-system/reboot-system.sh
sudo cp reboot-system.sh /usr/bin/reboot-system
sudo chmod +x /usr/bin/reboot-system
sudo reboot-system -h

Utilisation

Usage : reboot-system [options] [numero]
Options :
        -h              Affiche cette aide et quitte
        -q              Ne demande pas avant de rebooter
        -s prog         Demande une authentification via le programme ’prog’ (sudo ou gksudo)
        -a              Ne demande pas avant de corriger menu.lst
Si 'numero' est défini, utilisera ce choix sans faire apparaître la
fenêtre de choix du systême
Note: si vous n'utilisez pas -s, il vous incombe de
lancer ce script avec les droits de superutilisateur.

Exemple
En supposant que votre Windows soit sur l'entrée numéro 1, il vous suffit de créer un lanceur sur "reboot-system -q -s gksudo 1" pour rebooter automatiquement sous Windows.

L'intérêt du script est surtout en le lançant sans option
- il va détecter seul si le fichier menu.lst est pret à accepter la méthode, sinon il propose de le corriger (option -a)
- il affiche ensuite la liste des entrées disponibles, vous choisissez le système à lancer au prochain démarrage (dernière option)
- il vous demande si vous voulez redémarrer immédiatement (option -q)
confirmation-reboot.png

Pour ne plus avoir à taper le mot de passe
Il suffit d'indiquer à "sudo" que le script "reboot-system" n'a plus besoin du mot de passe lorsqu'il est demandé par votre utilisateur.
Pressez Alt+F2, entrez "EDITOR=gedit && sudo visudo", et cocher "exécuter dans un terminal" puis validez.
En fin de fichier, ajoutez ceci :

<nom d'utilisateur>  ALL=NOPASSWD:/usr/bin/reboot-system

Il faut bien sûr changer "<nom d'utilisateur>" en votre nom d'utilisateur.
Créez un lanceur sur "sudo reboot-system" et vous aurez votre interface de redémarrage avec choix du système à lancer,  sans besoin du mot de passe wink
lanceur.png

---
Edit le 07/12/2006 : Mise à jour du script, merci à pabix pour le remaniement des options de la ligne de commande.

Dernière modification par naholyr (Le 07/12/2006, à 19:57)

Hors ligne

#9 Le 07/12/2006, à 07:37

cep

Re : [multiboot]Redémarrer sous l'OS que vous voulez

atlas95 a écrit :

C

sudo grub-install /dev/hda

Commande inutile et potentiellement dangereuse.

Hors ligne

#10 Le 07/12/2006, à 08:22

atlas95

Re : [multiboot]Redémarrer sous l'OS que vous voulez

Ok je vais éditer je n'étais pas sur !
smile
Super ton script naholyr je vais le prendre mais perso pour la seule utilisation que je veux faire mon ptit script suffira smile

Dernière modification par atlas95 (Le 07/12/2006, à 08:25)


Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net

Hors ligne

#11 Le 07/12/2006, à 09:44

pabix

Re : [multiboot]Redémarrer sous l'OS que vous voulez

naholyr : ce que tu préconises est DANGEREUX ! (pas le script lui-même)

Ne JAMAIS faire

gksudo gedit /etc/sudoers

mais TOUJOURS

EDITOR=gedit sudo visudo

Sinon, vous pouvez péter votre système. (le EDITOR=gedit, si vous aimez vim, nano, kate, vous pouvez adapter)

À part ça, merci pour ce script, je vais essayer de l'améliorer. La gestion des options me semble assez "lâche" !

Benoit

Dernière modification par pabix (Le 07/12/2006, à 10:28)


Utilisateur du clavier BÉPO.
mortgat (()) gmail () com
GPG 0x377D716D

Hors ligne

#12 Le 07/12/2006, à 10:15

atlas95

Re : [multiboot]Redémarrer sous l'OS que vous voulez

Tu pourras poster l'amélioration big_smile pabix


Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net

Hors ligne

#13 Le 07/12/2006, à 10:29

pabix

Re : [multiboot]Redémarrer sous l'OS que vous voulez

bien sûr, mais il faut l'attendre, je peux pas tester ici au bureau smile

Benoit


Utilisateur du clavier BÉPO.
mortgat (()) gmail () com
GPG 0x377D716D

Hors ligne

#14 Le 07/12/2006, à 10:37

lagnole

Re : [multiboot]Redémarrer sous l'OS que vous voulez

Ba si tu peux tester au bureau!!! Suffit d'une connexion SSH et un serveur X installé sur ton windows du bureau (comme Xming par exemple...). D'ailleurs c'est ce que je vais faire! ^_^

Hors ligne

#15 Le 07/12/2006, à 10:41

naholyr

Re : [multiboot]Redémarrer sous l'OS que vous voulez

pabix a écrit :

naholyr : ce que tu préconises est DANGEREUX ! (pas le script lui-même)
[...]

Merci pour la précision, j'ai édité mon message et je vais éditer un autre message où j'ai à nouveau donné la même méthode. Je retiens wink

À part ça, merci pour ce script, je vais essayer de l'améliorer. La gestion des options me semble assez "lâche" !

Je t'encourage à le faire !
Pour la gestion des options je n'ai pas trouvé de manière "propre" de le faire, ma méthode fonctionne bien mais n'est pas très lisible sad D'autant moins que j'aurais aimé créé un alias avec argument mais je n'ai pas réussi à le faire. Edit : Je viens de tomber sur ceci je testerai ce soir si ça fonctionne. Contacte-moi sur naholyr -at- yahoo -point- fr si tu veux qu'on coordonne nos efforts smile

Je ne programme que très occasionnellement en Bash (Dash en l'occurrence) mais je ne voulais pas sortir Python pour ça. Je pense que j'aurais mieux fait tant qu'à faire (ne serait-ce que pour l'analyse du fichier menu.lst à base d'expressions régulières de façon un peu plus robuste que ça) wink

En même temps, les options je les ai mise pour pas grand-chose, il est bien plus efficace et sûr de lancer "sudo grub-set-default X && sudo reboot" que "sudo reboot-system -q X". À la rigueur la seule option que je pense réellement utile c'est "-q"/"--quiet". De plus je pense que les option --*sudo sont une hérésie, je ne devrais jamais bosser comme ça en pleine nuit hmm

Dernière modification par naholyr (Le 07/12/2006, à 11:29)

Hors ligne

#16 Le 07/12/2006, à 11:32

pabix

Re : [multiboot]Redémarrer sous l'OS que vous voulez

Je ne peux pas vérifier ce que j'ai fait, mais voici des modifications. Si qqn pouvait tester et réparer les erreurs qui ne manqueront pas de se produire :

#!/bin/bash
# coding: utf-8

# variables
grubMenu=/boot/grub/menu.lst
titleCorrect="Corriger le menu.lst"
textCorrect1="Votre fichier menu.lst est configuré avec"
textCorrect2="Avec cette option, vous ne pourrez utiliser les fonctionnalités de choix du système à redémarrer. Souhaitez-vous que ce script modifie votre fichier menu.lst afin d'activer cette fonctionnalité ? L’ancien fichier sera sauvegardé sous"
titleSelect="Choisir le système"
textSelect="Système a démarrer automatiquement"
widthSelect=400
heightSelect=300
titleReboot="Redémarrer maintenant ?"
textReboot1="Au prochain redémarrage, l’entrée"
textReboot2="sera l’option par défaut. Souhaitez-vous redémarrer immédiatement ?"
textCancel="Opération annulée"
textError="Opération annulée (erreur)"

optionQuiet=0
optionCorrect=0
sudoprog=""

function usage () {
        cat << EOF
Usage : $0 [options] [numero]
Options :
        -h              Affiche cette aide et quitte
        -q              Ne demande pas avant de rebooter
        -s prog         Demande une authentification via le programme ’prog’ (sudo ou gksudo)
        -a              Ne demande pas avant de corriger menu.lst
Si 'numero' est défini, utilisera ce choix sans faire apparaître la
fenêtre de choix du systême
Note: si vous n'utilisez pas -s, il vous incombe de
lancer ce script avec les droits de superutilisateur
EOF
}

# traitement des options de la ligne de commande
while getopts "qas:h" options; do
        case $options in
        q)
                optionQuiet=1
                ;;
        a)
                optionCorrect=1
                ;;
        s)
                case $OPTARG in
                "sudo" | "gksudo")
                        sudoprog=$OPTARG
                        ;;
                *)
                        echo Non valide
                        exit 1
                        ;;
                esac
                resultat=$($sudoprog echo 1)
                if [ "$resultat" != "1" ]; then
                        echo "$textError : Identification échouée"
                        exit 1
                fi
                ;;
        "h" | *)

                call usage
                exit 0
                ;;
        esac
done

# vérification
grubDefault=`grep '^default[[:space:]]\+' $grubMenu | sed 's/^default\s\+//'`
if [ "$grubDefault" != "saved" ]; then
        # on n'a pas trouvé la présence de "default", on demande à corriger le fichier automatiquement
        doCorrect=$optionCorrect
        if [ $doCorrect -eq 0 ]; then
                zenity --question --title "$titleCorrect" --text "$textCorrect1 'default $grubDefault'. $textCorrect2 '$grubMenu.bak'"
                if [ $? -eq 0 ]; then
                        doCorrect=1
                fi
        fi
        if [ $doCorrect -eq 1 ]; then
                # copie de sauvegarde
                cp $grubMenu $grubMenu.bak
                if [ ! -e "$grubMenu.bak" ]; then
                        zenity --error --text "$textError : impossible de sauvegarder $grubMenu"
                        exit 1
                fi
                tmp1=`tempfile`
                tmp2=`tempfile`
                cp $grubMenu $tmp1
                # modification de l'entrée "default X" en "default saved"
                # permet de modifier le default dynamiquement
                sed 's/^default\s\+.*$/# \0\ndefault\tsaved/' $tmp1 > $tmp2
                cp $tmp2 $tmp1
                # ajout d'une entrée "savedefault X" après chaque entrée "title" (les autres entrées "savedefault" arrivant après, il n'y a pas de conflit engendré par cette modif)
                # permet de récupérer l'entrée par défaut habituelle après chaque reboot.
                sed "s/^title.*\$/\\0\\nsavedefault\t$grubDefault/" $tmp1 > $tmp2
                cp $tmp2 $grubMenu
        else
                zenity --info --text "$textCancel"
                exit 1
        fi
fi

# sélection de l'os à redémarrer
if [ "`echo \" $*\" | grep ' [0-9]$'`" ]; then
        # l'option <numero> est spécifiée
        numeroChoix=`echo "$*" | sed 's/^.*\([0-9]\+\)$/\1/'`
else
        choixEntree=$(awk -v i=0 '/^title[\s\t]*(.*)$/ { print i++" "$2,$3,$4,$5,$6,$7,$8,$9 }' $grubMenu | zenity --list --title "$titleSelect" --text "$textSelect" --column "Boot" --width $widthSelect --height $heightSelect)
        numeroChoix=`echo $choixEntree | sed 's/^\([0-9]\+\).*$/\1/'`
        nomChoix=`echo $choixEntree | sed 's/^[0-9]\+ //'`
fi

# actions en fonction de la sélection
if [ "$numeroChoix" = "" ]; then
        # aucun choix, ou annulation
        zenity --info --text "$textCancel"
else
        # application du choix
        $sudoprog grub-set-default $numeroChoix
        if [ $? -eq 0 ]; then
                # application ok, affichage d'une question pour rebooter immédiatement ou non
                doReboot=$optionQuiet
                if [ $doReboot -eq 0 ]; then
                        zenity --question --title "$titleReboot" --text "$textReboot1 \"$nomChoix\" $textReboot2"
                        if [ $? -eq 0 ]; then
                                doReboot=1
                        fi
                fi
                if [ $doReboot -eq 1 ]; then
                        reboot
                fi
        else
                zenity --error --text "$textError"
                exit 1
        fi
fi

Dernière modification par pabix (Le 07/12/2006, à 12:47)


Utilisateur du clavier BÉPO.
mortgat (()) gmail () com
GPG 0x377D716D

Hors ligne

#17 Le 07/12/2006, à 11:35

naholyr

Re : [multiboot]Redémarrer sous l'OS que vous voulez

Bon ben voilà c'est fait pour les options ^^
Merci pour le coup de main smile

Hors ligne

#18 Le 07/12/2006, à 12:33

atlas95

Re : [multiboot]Redémarrer sous l'OS que vous voulez

[/home/atlas]>$ /usr/bin/reboot-system
/usr/bin/reboot-system: line 50: erreur de syntaxe près du jeton `)' inattendu
/usr/bin/reboot-system: line 50: `                gksudo)'

Ne fonctionne pas ...


Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net

Hors ligne

#19 Le 07/12/2006, à 12:48

pabix

Re : [multiboot]Redémarrer sous l'OS que vous voulez

oui, en effet ! dans une structure case, c'était pas possible de réunir deux cas comme en C. C'est résolu, merci. Erreur suivante ?

Benoit


Utilisateur du clavier BÉPO.
mortgat (()) gmail () com
GPG 0x377D716D

Hors ligne

#20 Le 07/12/2006, à 13:01

atlas95

Re : [multiboot]Redémarrer sous l'OS que vous voulez

J'ai pas tester de redémarrer mais j'ai d'erreur.


Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net

Hors ligne

#21 Le 07/12/2006, à 16:32

misteraph

Re : [multiboot]Redémarrer sous l'OS que vous voulez

j'ai bidouillé mon fichiers sudoers et maintenant, je ne peux plus faire une commande en sudo. Je n'ai pas d'erreur mais rien ne se passe.

Voici mon sudoers :

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

# Host alias specification

# User alias specification

# Cmnd alias specification

# Defaults

# User privilege specification
root    ALL=(ALL) ALL
misteraph ALL=(ALL) ALL

Hors ligne

#22 Le 07/12/2006, à 16:35

pabix

Re : [multiboot]Redémarrer sous l'OS que vous voulez

misteraph : tu as fait avec visudo ? Ou alors gedit /etc/sudoers ? Si tu as fait gedit /etc/sudoers, tu es bon pour la réinstallation.

Benoit


Utilisateur du clavier BÉPO.
mortgat (()) gmail () com
GPG 0x377D716D

Hors ligne

#23 Le 07/12/2006, à 16:49

cep

Re : [multiboot]Redémarrer sous l'OS que vous voulez

Il devrait pouvoir éviter la réinstallation smile

Exemple de configuration de /etc/sudoers sur une edgy :

:~$ stat -c %a /mnt/hdb2/etc/sudoers ; ls -l /mnt/hdb2/etc/sudoers
440
-r--r----- 1 root root 403 2006-10-07 19:40 /mnt/hdb2/etc/sudoers
:~$ sudo cat -n /mnt/hdb2/etc/sudoers
     1  # /etc/sudoers
     2  #
     3  # This file MUST be edited with the 'visudo' command as root.
     4  #
     5  # See the man page for details on how to write a sudoers file.
     6  # Host alias specification
     7
     8  # User alias specification
     9
    10  # Cmnd alias specification
    11
    12  # Defaults
    13
    14  Defaults        !lecture,tty_tickets,!fqdn
    15
    16  # User privilege specification
    17  root    ALL=(ALL) ALL
    18
    19  # Members of the admin group may gain root privileges
    20  %admin ALL=(ALL) ALL

Regarde si tu peux démarrer en recovery pour modifier, ou depuis un live cdrom.

Quelques exemples de ménipulation avec sudo :

http://www.cepcasa.info/parted/recup1.html#2%B0_sudo_ne_fonctionne_plus_

Bonne continuation.
cep

Dernière modification par cep (Le 07/12/2006, à 16:50)

Hors ligne

#24 Le 07/12/2006, à 16:51

cep

Re : [multiboot]Redémarrer sous l'OS que vous voulez

@ misteraph : au fait, pourquoi avoir posté dans ce sujet ?

Hors ligne

#25 Le 07/12/2006, à 17:01

misteraph

Re : [multiboot]Redémarrer sous l'OS que vous voulez

parce que je l'ai cassé en lisant ce sujet wink

Sinon, dans le script, quand on veut redemarrer direct, il manque un sudo


#!/bin/bash
# coding: utf-8

# variables
grubMenu=/boot/grub/menu.lst
titleCorrect="Corriger le menu.lst"
textCorrect1="Votre fichier menu.lst est configuré avec"
textCorrect2="Avec cette option, vous ne pourrez utiliser les fonctionnalités de choix du système à redémarrer. Souhaitez-vous que ce script modifie votre fichier menu.lst afin d'activer cette fonctionnalité ? L’ancien fichier sera sauvegardé sous"
titleSelect="Choisir le système"
textSelect="Système a démarrer automatiquement"
widthSelect=400
heightSelect=300
titleReboot="Redémarrer maintenant ?"
textReboot1="Au prochain redémarrage, l’entrée"
textReboot2="sera l’option par défaut. Souhaitez-vous redémarrer immédiatement ?"
textCancel="Opération annulée"
textError="Opération annulée (erreur)"

optionQuiet=0
optionCorrect=0
sudoprog=""
leSudo="sudo"

function usage () {
        cat << EOF
Usage : $0 [options] [numero]
Options :
        -h              Affiche cette aide et quitte
        -q              Ne demande pas avant de rebooter
        -s prog         Demande une authentification via le programme ’prog’ (sudo ou gksudo)
        -a              Ne demande pas avant de corriger menu.lst
Si 'numero' est défini, utilisera ce choix sans faire apparaître la
fenêtre de choix du systême
Note: si vous n'utilisez pas -s, il vous incombe de
lancer ce script avec les droits de superutilisateur
EOF
}

# traitement des options de la ligne de commande
while getopts "qas:h" options; do
        case $options in
        q)
                optionQuiet=1
                ;;
        a)
                optionCorrect=1
                ;;
        s)
                case $OPTARG in
                "sudo" | "gksudo")
                        sudoprog=$OPTARG
                        ;;
                *)
                        echo Non valide
                        exit 1
                        ;;
                esac
                resultat=$($sudoprog echo 1)
                if [ "$resultat" != "1" ]; then
                        echo "$textError : Identification échouée"
                        exit 1
                fi
                ;;
        "h" | *)

                call usage
                exit 0
                ;;
        esac
done

# vérification
grubDefault=`grep '^default[[:space:]]\+' $grubMenu | sed 's/^default\s\+//'`
if [ "$grubDefault" != "saved" ]; then
        # on n'a pas trouvé la présence de "default", on demande à corriger le fichier automatiquement
        doCorrect=$optionCorrect
        if [ $doCorrect -eq 0 ]; then
                zenity --question --title "$titleCorrect" --text "$textCorrect1 'default $grubDefault'. $textCorrect2 '$grubMenu.bak'"
                if [ $? -eq 0 ]; then
                        doCorrect=1
                fi
        fi
        if [ $doCorrect -eq 1 ]; then
                # copie de sauvegarde
                cp $grubMenu $grubMenu.bak
                if [ ! -e "$grubMenu.bak" ]; then
                        zenity --error --text "$textError : impossible de sauvegarder $grubMenu"
                        exit 1
                fi
                tmp1=`tempfile`
                tmp2=`tempfile`
                cp $grubMenu $tmp1
                # modification de l'entrée "default X" en "default saved"
                # permet de modifier le default dynamiquement
                sed 's/^default\s\+.*$/# \0\ndefault\tsaved/' $tmp1 > $tmp2
                cp $tmp2 $tmp1
                # ajout d'une entrée "savedefault X" après chaque entrée "title" (les autres entrées "savedefault" arrivant après, il n'y a pas de conflit engendré par cette modif)
                # permet de récupérer l'entrée par défaut habituelle après chaque reboot.
                sed "s/^title.*\$/\\0\\nsavedefault\t$grubDefault/" $tmp1 > $tmp2
                cp $tmp2 $grubMenu
        else
                zenity --info --text "$textCancel"
                exit 1
        fi
fi

# sélection de l'os à redémarrer
if [ "`echo \" $*\" | grep ' [0-9]$'`" ]; then
        # l'option <numero> est spécifiée
        numeroChoix=`echo "$*" | sed 's/^.*\([0-9]\+\)$/\1/'`
else
        choixEntree=$(awk -v i=0 '/^title[\s\t]*(.*)$/ { print i++" "$2,$3,$4,$5,$6,$7,$8,$9 }' $grubMenu | zenity --list --title "$titleSelect" --text "$textSelect" --column "Boot" --width $widthSelect --height $heightSelect)
        numeroChoix=`echo $choixEntree | sed 's/^\([0-9]\+\).*$/\1/'`
        nomChoix=`echo $choixEntree | sed 's/^[0-9]\+ //'`
fi

# actions en fonction de la sélection
if [ "$numeroChoix" = "" ]; then
        # aucun choix, ou annulation
        zenity --info --text "$textCancel"
else
        # application du choix
        $sudoprog grub-set-default $numeroChoix
        if [ $? -eq 0 ]; then
                # application ok, affichage d'une question pour rebooter immédiatement ou non
                doReboot=$optionQuiet
                if [ $doReboot -eq 0 ]; then
                        zenity --question --title "$titleReboot" --text "$textReboot1 \"$nomChoix\" $textReboot2"
                        if [ $? -eq 0 ]; then
                                doReboot=1
                        fi
                fi
                if [ $doReboot -eq 1 ]; then
                       $leSudo reboot
                fi
        else
                zenity --error --text "$textError"
                exit 1
        fi
fi

Dernière modification par misteraph (Le 07/12/2006, à 17:10)

Hors ligne