Comment exécuter un fichier à partir d'une clé USB FAT?

12

J'essaie d'installer une application portable sur ma clé USB de manière à ce qu'elle soit compatible avec Ubuntu et Windows (en particulier, un programme appelé eToys). La prise en charge est déjà intégrée dans l'application pour les deux systèmes d'exploitation - il y en a etoys.shpour Ubuntu et etoys.exepour Windows. J'ai décidé d'installer sur un lecteur FAT car cela peut être lu sur les 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 n'est pas avec le fichier - lorsque tout le dossier est copié sur le disque dur local, l'application fonctionne très bien dans Ubuntu. Mais lorsque j'essaie de l'exécuter à partir de l'USB, il ouvre le fichier dans un éditeur de texte.

J'ai ensuite essayé de l'exécuter à partir d'un terminal, mais j'ai reçu le message Autorisation refusée.

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

Existe-t-il un moyen facile d'exécuter des choses à partir d'une clé USB?

Derek Redfern
la source
2
Question connexe ici: askubuntu.com/questions/23108/…
luri

Réponses:

20

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

Maintenant, vous pouvez tricher:

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

    #!/bin/bash
    sh /media/USB/etoys.sh
    
Stefano Palazzo
la source
Merci beaucoup! La deuxième triche est certainement une option, et je garderai cela à l'esprit. Sinon, existe-t-il un autre système de fichiers que je pourrais utiliser qui fonctionnerait avec Windows et Ubuntu et me permettrait d'exécuter des fichiers?
Derek Redfern
Vous pouvez utiliser ext2 ou ext3, mais vous devez installer un petit utilitaire sur Windows pour le faire fonctionner.
Une autre question à ce sujet - j'ai décidé de choisir l'option de créer un script sur le disque dur et cela fonctionne très bien. Mais je veux aussi avoir des scripts pour des programmes qui ne sont pas des fichiers .sh - par exemple, Portable Chromium, qui est de type "exécutable (application / x-exécutable)". L'utilisation de sh ne fonctionne pas et ./Chromium donne toujours l'autorisation refusée. Y a-t-il une autre commande à utiliser pour cela?
Derek Redfern,
Humm, je suppose que vous pouvez simplement tricher: avant d'exécuter le chrome, vous pouvez le modifier pour le rendre exécutable. Étant donné que la commande chmod sera appelée à chaque fois, il n'est plus important que les autorisations ne soient pas
Je pensais que vous ne pouviez pas du tout chmod sur FAT car il ne prend pas en charge les autorisations Unix.
Derek Redfern,
8

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

mode=value

Définissez le mode de tous les fichiers sur valeur et 0777sans tenir compte des autorisations d'origine. Ajoutez une autorisation de recherche aux répertoires disposant d'une autorisation de lecture. La valeur est donnée en octal.

Bonsi Scott
la source
1
Dois-je définir cela dans fstab?
Derek Redfern
@Bonsi Scott Il n'y a pas d' mode=option pour vfat, voir mount (8) .
pevik
6

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

Fondamentalement, il 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 aide 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
Derek Redfern
la source
3

En fin de compte, la question semble être que udisksmonte le système de fichiers avec l' showexecoption empêchant tout fichier qui ne se termine pas .exe, .batou .comêtre exécuté.

Une question connexe (comment donner des options de montage personnalisées aux udisks) peut être trouvée ici: Comment configurer pour enregistrer des données pour qu'elles soient instantanées? Il s'avère que vous pouvez utiliser la udevconfiguration pour ce faire.

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

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

Virgile
la source
2

Aucune des solutions présentées n'a fonctionné pour autant que je sache pour obtenir un programme que j'ai écrit en tant que programme de terminal Linux à exécuter dans ma partition FAT32, mais changer le nom de fichier du programme pour inclure l'extension .exe a fonctionné (merci pour l'astuce) , tout ce que j'ai fait était de renommer le nom de fichier en nom de fichier.exe pour le programme terminal que j'essayais d'exécuter sur une partition FAT32, puis de le démonter, de le remonter et de définir les autorisations de disque pour autoriser l'exécution, puis accédez à nom de fichier. exe et définissez ses autorisations, puis la coche resterait au lieu de revenir à un moins, et lorsque je définis le chemin d'accès et que je saisis ./filename.exe à l'invite du terminal, le programme s'exécutait comme il se doit et affiche la ligne de commande, y compris le nom de fichier .exe tel qu'il est entré, bien que le répertoire de fichiers Ubuntu affiche le fichier sous MSDOS / Windows, il s'exécute comme un programme Linux.

Dan Hudgins
la source
1

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

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

MrSteve
la source
0

Vous pouvez utiliser le umask=000mode:

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

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

pevik
la source
-1

Si la syntaxe est bash ...

bash yourscript
Sergio Abreu
la source