« Installer des logiciels sur un support externe (SD, USB), avec une icône dans le mode Easy de l'EeePC apparaissant automatiquement » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
(→‎Automatisation du démontage : -> "$@" à cause des espaces dans les arguments)
Ligne 165 : Ligne 165 :
Pour les plus curieux, le script contient des commentaires expliquant son fonctionnement.
Pour les plus curieux, le script contient des commentaires expliquant son fonctionnement.


==Plus simple : partitionner une clef USB ou la carte SDHC==
J'ai fait le test en partitionnant en 2 une clef USB. L'objectif est d'avoir une partie au format "Linux" (en réalité '''ext2'''), et une autre au format Windows (en réalité '''FAT32''') qui pourra être utilisée sur tous les ordinateurs, quelque soit leur système d'exploitation.
Attention : cette manipulation va effacer toutes les informations présentes sur votre support.
===Préparation du support===
Nous allons utiliser l'outil <code>fdisk</code>, qui permet de définir les partitions (en ligne de commande car il n'y a pas de logiciel graphique sur l'EeePC).
Ma clef USB est le périphérique <code>/dev/sdc</code>. Avant de continuer, assurez-vous en comme expliqué ci-dessus (tapez simplement <code>mount</code>).
Enfin, lancez fdisk :
<code multi>$ sudo fdisk /dev/sdc
/home/user> sudo fdisk /dev/sdc
The number of cylinders for this disk is set to 3816.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
  (e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): p
Disk /dev/sdc: 1000 MB, 1000341504 bytes
16 heads, 32 sectors/track, 3816 cylinders
Units = cylinders of 512 * 512 = 262144 bytes
  Device Boot      Start        End      Blocks  Id  System
/dev/sdc1              1        1954      976880    b  W95 FAT32
Command (m for help): </code>
La commande '''p''' permet d'afficher la table de partitions de la clef.
Nous allons supprimer la partition, en utilisant la commande '''d''' :
<code multi>Command (m for help): d
Selected partition 1</code>
Puis créer les 2 partitions avec la commande '''n'''. La première fera 512 Mo, la seconde prendra la place restante :
<code multi>Command (m for help): n
Command action
  e  extended
  p  primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3816, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-3816, default 3816): +512M
Command (m for help): n
Command action
  e  extended
  p  primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1955-3816, default 1955): 1955
Last cylinder or +size or +sizeM or +sizeK (1955-3816, default 3816): 3816
Command (m for help): p
Disk /dev/sdc: 1000 MB, 1000341504 bytes
16 heads, 32 sectors/track, 3816 cylinders
Units = cylinders of 512 * 512 = 262144 bytes
  Device Boot      Start        End      Blocks  Id  System
/dev/sdc1              1        1954      500208  83  Linux
/dev/sdc2            1955        3816      476672  83  Linux
Command (m for help):</code>


<hr />
<hr />
[[EeePC|Retour à la page EeePC]]
[[EeePC|Retour à la page EeePC]]
<hr />
<hr />

Version du 2 mars 2009 à 23:09

Nous allons voir dans cet article comment installer et exécuter des logiciels depuis un support amovible, tel que carte SD ou SDHC, clef USB, disque dur externe...

De plus, grâce à une fonctionnalité cachée du mode Easy de l'EeePC, l'icône de lancement va apparaître lors de l'insertion du support. (Techniquement, les icônes peuvent être définies mais ne pas apparaître si la ligne de commande est invalide, par exemple si le programme n'existe pas. Cependant, si le programme se met à exister en cours de session, l'icône apparaît automatiquement !)

J'ai utilisé cette méthode pour :

Ce qui m'a permis d'économiser 120 Mo du disque principal :-)

J'ai depuis l'écriture de cette article découvert comment installer des logiciels intégrés à la distribution ou présents sur des dépôts additionnels, ce qui fait une bien plus grande variété de logiciels candidats !

Préparation du support

Les clefs USB ou les cartes SD sont formatées lors de leur achat au format FAT32 (format par défaut de Windows jusqu'à récemment). Or pour des raisons de sécurité, les distributions Linux empêchent par défaut d'exécuter des programmes stockés sur un tel support.

Cette page : http://wiki.eeeuser.com/execute_apps_off_sd explique comment outrepasser cette protection, ou mieux, partitionner en 2 la clef / carte SD afin de faire une partie FAT32 et une partie spéciale Linux. Si vous le pouvez, c'est la meilleure méthode.

Pour ma part, je ne voulais pas repartitionner ma carte SD (il faudra que je teste ça un jour ceci dit). J'ai donc créé un gros fichier dessus, que je vais utiliser comme une autre partition normale.

Créez un fichier vide, nommé hdd, de 1 Giga-octets (soit 1048576 = 1024 x 1024, vous pouvez changer ce nombre pour augmenter/diminuer sa taille) sur la carte : $ cd /media/MMC-SD/macartesd $ dd if=/dev/zero of=hdd bs=1024 count=1048576 Ensuite, il faut le formater en format ext2 (oui on peut formater un fichier ;-) par la commande : $ sudo mkfs.ext2 hdd mke2fs 1.40-WIP (14-Nov-2006) hdd n'est pas un périphérique spécial en mode bloc. Procéder malgré tout? (y pour oui, n pour non) y Étiquette de système de fichiers= Type de système d'exploitation : Linux Taille de bloc=4096 (log=2) Taille de fragment=4096 (log=2) 131072 i-noeuds, 262144 blocs 13107 blocs (5.00%) réservés pour le super utilisateur Premier bloc de données=0 Nombre maximum de blocs du système de fichiers=268435456 8 groupes de blocs 32768 blocs par groupe, 32768 fragments par groupe 16384 i-noeuds par groupe Superblocs de secours stockés sur les blocs :

       32768, 98304, 163840, 229376

Écriture des tables d'i-noeuds : complété Écriture des superblocs et de l'information de comptabilité du système de fichiers : complété

Le système de fichiers sera automatiquement vérifié tous les 25 montages ou après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i pour écraser la valeur.

Enfin, vous pouvez le monter dans un répertoire (j'ai choisi /opt2) et vous en servir : $ sudo mkdir /opt2 $ sudo mount /media/MMC-SD/macartesd/hdd /opt2 -o loop

Automatiser le montage du nouvel emplacement pour les logiciels

... et donc l'apparition automatique des icônes définies pour les programmes présents sur ce support.

Nous allons maintenant automatiser le montage et le démontage de notre disque virtuel. Si vous avez installé des applications dessus, disposant d'une icône dans le mode Easy de l'EeePC, celle-ci apparaîtra et disparaîtra lors de l'insertion et du retrait du périphérique (en utilisant l'icône du périphérique dans la bare de tâches, clic droit, retirer en toute sécurité).

Par exemple, j'ai installé Firefox 3.1 dans le disque virtuel, monté dans /opt2, et son icône apparaît automatiquement. Elle disparaît lorsque je retire la carte SD.

Automatisation du montage

Le montage passe par le programme /usr/bin/xandros_device_detection_dialog. Nous allons donc le modifier.

Vous devez auparavant suivre le tutoriel Empêcher la détection automatique des périphériques USB et de la carte SD au démarrage de l'EeePC afin de transformer ce programme en un script modifiable. Si vous ne l'avez pas fait, faites-le maintenant.

Voici les modifications apportées au script :

  1. !/bin/sh
  1. monte automatiquement /opt2 si possible

if [ "`mount | grep /media/MMC-SD/SDHC16GO`" != "" \

 -a "`mount | grep /opt2`" = "" \
 -a -f /media/MMC-SD/SDHC16GO/hdd ] ; then
       sudo mount -o loop /media/MMC-SD/SDHC16GO/hdd /opt2

fi

  1. quitter le programme si la machine est démarrée depuis moins de 30 secondes
  2. (permet de ne pas afficher la boîte de dialogue pour la carte SD)

if [ `cat /proc/uptime | cut -f1 -d.` -lt 30 ] ; then exit ; fi

  1. lancer le programme original en lui passant tous les arguments avec lesquels on a été appelé

exec xandros_device_detection_dialog.orig "$@"

La partie qui nous concerne est le premier bloc, entre if et fi. Le test vérifie si le bon périphérique est monté (dans mon cas, ma carte SD dans /media/MMC-SD/SDHC16GO), puis si le disque virtuel n'est pas monté (dans /opt2) et si le fichier le contenant existe bien (/media/MMC-SD/SDHC16GO/hdd). Dans ce cas, le fichier du disque virtuel est monté dans /opt2. Vous devez bien sûr adapter ces valeurs à ce que vous avez choisi.

Note : vous pouvez "choisir" le nom du répertoire dans lequel se monte votre périphérique USB, en lui donnant un ibellé (label en anglais). Pour ce faire, repérez le périphérique /dev/... avec la commande mount : /home/user> mount rootfs on / type rootfs (rw) /dev/sda1 on / type ext2 (ro) unionfs on / type unionfs (rw,dirs=/=rw:/=ro) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw) tmpfs on /dev/shm type tmpfs (rw) tmpfs on /tmp type tmpfs (rw) usbfs on /proc/bus/usb type usbfs (rw) /dev/sdb1 on /media/MMC-SD/SDHC16GO type vfat (rw,nosuid,nodev,noexec,fmask=0111,dmask=0000,codepage=cp850,iocharset=utf8,shortname=mixed) /dev/loop0 on /opt2 type ext2 (rw)

Ici, il s'agit de /dev/sdb1.

Ensuite donnez-lui un label par la commande :

$ sudo e2label /dev/sdb1 mon_nouveau_label

ou bien $ sudo mkdosfs -n mon_nouveau_label /dev/sdb1

et le périphérique se montera dans le répertoire /media/MMC-SD/mon_nouveau_label (et apparaîtra aussi dans votre répertoire utilisateur sous ce nom).

Automatisation du démontage

Pour le démontage, nous devons modifier le programme /bin/umount.

Comme c'est un programme binaire (non modifiable facilement), aussi nous allons commencer par le renommer : $ sudo mv /bin/umount /bin/umount.bin

Puis nous allons créer un script dans l'ancien emplacement (c'est donc le script qui sera appelé à la place du programme original). Utilisez par exemple $ sudo nano /bin/umount et copiez-collez le script ci-dessous.

  1. !/bin/sh
  1. Léa 22/1/2009
  2. /bin/umount (le programme umount original est renommé umount.bin)
  1. quand on essaie de démonter la carte SD, démonter le loop d'abord

if `echo "$@" | grep -q SDHC16GO` ; then

       # démonte et détache le périphérique loop, pour libérer sdb1
       LOOP=`mount | grep "on /opt2 type" | cut -f1 -d" "`
       if [ "$LOOP" != "" ] ; then
               umount /opt2 && \
               losetup --detach $LOOP
       fi

fi

  1. dans tous les cas, exécuter le umount original avec les mêmes arguments
  2. (et remplacer ce shell par umount.bin pour que l'appelant
  3. récupère le code retour)

exec umount.bin "$@"

Bien sûr, remplacez dans le script SDHC16GO et /opt2 par les valeurs que vous avez choisies.

Pour les plus curieux, le script contient des commentaires expliquant son fonctionnement.

Plus simple : partitionner une clef USB ou la carte SDHC

J'ai fait le test en partitionnant en 2 une clef USB. L'objectif est d'avoir une partie au format "Linux" (en réalité ext2), et une autre au format Windows (en réalité FAT32) qui pourra être utilisée sur tous les ordinateurs, quelque soit leur système d'exploitation.

Attention : cette manipulation va effacer toutes les informations présentes sur votre support.

Préparation du support

Nous allons utiliser l'outil fdisk, qui permet de définir les partitions (en ligne de commande car il n'y a pas de logiciel graphique sur l'EeePC).

Ma clef USB est le périphérique /dev/sdc. Avant de continuer, assurez-vous en comme expliqué ci-dessus (tapez simplement mount).

Enfin, lancez fdisk : $ sudo fdisk /dev/sdc

/home/user> sudo fdisk /dev/sdc

The number of cylinders for this disk is set to 3816. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs

  (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/sdc: 1000 MB, 1000341504 bytes 16 heads, 32 sectors/track, 3816 cylinders Units = cylinders of 512 * 512 = 262144 bytes

  Device Boot      Start         End      Blocks   Id  System

/dev/sdc1 1 1954 976880 b W95 FAT32

Command (m for help):

La commande p permet d'afficher la table de partitions de la clef.

Nous allons supprimer la partition, en utilisant la commande d :

Command (m for help): d Selected partition 1

Puis créer les 2 partitions avec la commande n. La première fera 512 Mo, la seconde prendra la place restante :

Command (m for help): n Command action

  e   extended
  p   primary partition (1-4)

p Partition number (1-4): 1 First cylinder (1-3816, default 1): 1 Last cylinder or +size or +sizeM or +sizeK (1-3816, default 3816): +512M

Command (m for help): n Command action

  e   extended
  p   primary partition (1-4)

p Partition number (1-4): 2 First cylinder (1955-3816, default 1955): 1955 Last cylinder or +size or +sizeM or +sizeK (1955-3816, default 3816): 3816

Command (m for help): p

Disk /dev/sdc: 1000 MB, 1000341504 bytes 16 heads, 32 sectors/track, 3816 cylinders Units = cylinders of 512 * 512 = 262144 bytes

  Device Boot      Start         End      Blocks   Id  System

/dev/sdc1 1 1954 500208 83 Linux /dev/sdc2 1955 3816 476672 83 Linux

Command (m for help):


Retour à la page EeePC