web-dev-qa-db-fra.com

Comment exécuter un fichier depuis une clé USB FAT?

J'essaie d'installer une application portable sur mon lecteur USB, de sorte qu'elle soit compatible avec Ubuntu et Windows (en particulier, un programme appelé eToys). La prise en charge est déjà intégrée à l'application pour les deux systèmes d'exploitation: il existe etoys.sh pour Ubuntu et etoys.exe pour Windows. J'ai décidé d'installer sur un lecteur FAT, car celui-ci peut être lu à partir des deux systèmes. Cela fonctionne bien pour Windows, mais pour une raison quelconque, je ne peux pas exécuter etoys.sh sur Ubuntu.

Le problème ne vient pas du fichier: lorsque tout le dossier est copié sur le disque dur local, l'application fonctionne parfaitement sous Ubuntu. Mais lorsque j'essaie de l'exécuter depuis la clé USB, le fichier est ouvert dans un éditeur de texte.

J'ai ensuite essayé de l'exécuter depuis un terminal, mais j'ai reçu le message Permission refusée.

J'ai eu le même problème avec d'autres exécutables.

Existe-t-il un moyen simple d’exécuter des tâches à partir d’une clé USB?

10
Derek Redfern

J'ai en fait trouvé une excellente solution à l'adresse http://ubuntuforums.org/showthread.php?t=1665289 qui a résolu le problème.

En gros, il est dit d’exécuter la commande

Sudo sed -i -e 's|showexec|\x00\x00\x00\x00\x00\x00\x00\x00|g' /usr/lib/udisks/udisks-daemon

et cela empêchera les disques de se monter automatiquement avec l'option showexec.

Je n'aime pas répondre à ma propre question, mais cela a fonctionné pour moi et j'espère que cela aidera aussi les autres.

pour Ubuntu 18.04:

Sudo sed -i -e 's|showexec|\x00\x00\x00\x00\x00\x00\x00\x00|g' /usr/lib/udisks2/udisksd
7
Derek Redfern

En raison des limitations du système de fichiers FA32, vous ne pouvez pas.

Maintenant, vous pouvez tricher:

  1. soit appeler sh etoys.sh au lieu de ./etoys.sh
  2. si vous le souhaitez, vous pouvez même créer un autre script (sur votre disque dur, par exemple) qui appelle simplement votre script sur le lecteur USB:

    #!/bin/bash
    sh /media/USB/etoys.sh
    
19
user9521

Le montage de l'appareil avec -o mode=<value> devrait fonctionner

mode=value

Définissez le mode de tous les fichiers sur value & 0777 en ignorant les autorisations initiales. Ajoutez une autorisation de recherche aux annuaires disposant d'une autorisation de lecture. La valeur est donnée en octal.

8
Bonsi Scott

En fin de compte, le problème semble être que udisks monte le système de fichiers avec l'option showexec, empêchant ainsi l'exécution de tout fichier ne se terminant pas par .exe, .bat ou .com.

Une question connexe (comment donner des options de montage personnalisées à udisks) peut être trouvée ici: Comment configurer pour enregistrer les données sur une clé USB instantanément? Il s'avère que vous pouvez utiliser la configuration udev pour le faire.

La définition des options de montage par défaut pour les udisks est-elle vraiment impossible? propose une autre solution basée sur udisks-glue, mais elle semble moins convaincante car elle repose finalement sur udisks, de sorte qu'il semble que vous puissiez ajouter des options, mais pas supprimez-les, et en particulier showexec est toujours là).

Dans tous les cas, j'ai tendance à préférer cela à la correction d'un fichier binaire.

3
Virgile

Aucune des solutions présentées n'a fonctionné aussi loin que je pouvais le dire pour faire exécuter un programme que j'avais écrit en tant que programme de terminal Linux dans ma partition FAT32, mais la modification du nom de fichier du programme pour inclure l'extension .exe fonctionnait (merci pour le conseil) Tout ce que j’ai fait, c’est renommer filename en filename.exe pour le programme de terminal que j’essayais d’exécuter sur une partition FAT32, puis le démonter, le remonter et définir les autorisations du disque pour autoriser l’exécution, puis accéder au nom du fichier. exe et définir ses autorisations et puis la coche serait coller plutôt que de revenir à un moins, et quand je fixe le chemin et saisis ./filename.exe sur le terminal Invite le programme exécuté comme il se doit et montre la ligne de commande, y compris le nom de fichier .exe tel que saisi, bien que le répertoire de fichiers Ubuntu affiche le fichier sous MSDOS/Windows, il s’exécute en tant que programme Linux.

2
Dan Hudgins

J'ai donc trouvé une solution beaucoup plus simple (et plus sûre).

Utilisez gparted pour formater l’USB FAT32, puis nous Partition => Manage Flags pour définir les drapeaux suivants: boot, lba

1
MrSteve

Vous pouvez utiliser le mode umask=000:

umount /dev/sdb1
mount -o umask=000 -t vfat /dev/sdb1 /media/sdb1

Source: wiki.linuxquestions.org , section "Options de montage pour la graisse" dans mount (8) .

0
pevik