¿Cómo ejecuto un archivo desde una unidad USB FAT?

12

Estoy tratando de instalar una aplicación portátil en mi unidad USB de modo que sea compatible con Ubuntu y Windows (específicamente, un programa llamado eToys). El soporte ya está integrado en la aplicación para ambos sistemas operativos: hay etoys.shpara Ubuntu y etoys.exepara Windows. Decidí instalarlo en un disco FAT ya que se puede leer desde ambos sistemas. Esto funciona bien para Windows, pero por alguna razón no puedo ejecutar etoys.sh en Ubuntu.

El problema no está en el archivo: cuando se copia toda la carpeta en el disco duro local, la aplicación funciona muy bien en Ubuntu. Pero cuando trato de ejecutarlo desde el USB, abre el archivo en un editor de texto.

Luego intenté ejecutarlo desde una terminal, pero recibí el mensaje Permiso denegado.

También he tenido el mismo problema con otros ejecutables.

¿Hay una manera fácil de ejecutar cosas desde una memoria USB?

Derek Redfern
fuente
2
Pregunta relacionada aquí: askubuntu.com/questions/23108/…
luri

Respuestas:

20

Debido a las limitaciones del sistema de archivos FA32, no puede.

Ahora, puedes hacer trampa:

  1. ya sea llamar en sh etoys.shlugar de./etoys.sh
  2. si lo desea, incluso puede crear otra secuencia de comandos (que estaría en su disco duro, por ejemplo) que simplemente llame a su secuencia de comandos en la unidad USB:

    #!/bin/bash
    sh /media/USB/etoys.sh
    
Stefano Palazzo
fuente
¡Muchas gracias! El segundo truco es ciertamente una opción, y lo tendré en cuenta. Alternativamente, ¿hay otro sistema de archivos que pueda usar que funcione tanto con Windows como con Ubuntu y me permita ejecutar archivos?
Derek Redfern
Puede usar ext2 o ext3, pero necesita instalar una pequeña utilidad en Windows para que funcione.
Una pregunta más sobre esto: decidí ir con la opción de crear un script en el disco duro y funciona muy bien. Pero también quiero tener scripts para programas que no son archivos .sh, por ejemplo, Portable Chromium, que es de tipo "ejecutable (aplicación / x-ejecutable)". Usar sh no funciona, y ./Chromium todavía da permiso denegado. ¿Hay otro comando para usar para esto?
Derek Redfern
Humm, supongo que podrías hacer trampa: antes de ejecutar el cromo, puedes modificarlo para hacerlo ejecutable. Dado que el comando chmod se llamará cada vez, ya no importa que los permisos no se lleven a cabo la próxima vez que inserte la unidad USB
Sin embargo, pensé que no podías usar chmod en FAT, ya que no admite permisos Unix.
Derek Redfern
8

El montaje del dispositivo -o mode=<value>debería funcionar

mode=value

Establezca el modo de todos los archivos en valor y 0777sin tener en cuenta los permisos originales. Agregue permiso de búsqueda a directorios que tengan permiso de lectura. El valor se da en octal.

Bonsi Scott
fuente
1
¿Debo configurar esto en fstab?
Derek Redfern el
@Bonsi Scott No hay mode=opción para vfat, ver mount (8) .
Pevik
6

En realidad encontré una gran solución en http://ubuntuforums.org/showthread.php?t=1665289 que solucionó el problema.

Básicamente, dice ejecutar el comando

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

y eso evitará que los discos se monten automáticamente con la opción showexec.

No me gusta responder mi propia pregunta, pero esto funcionó para mí y espero que también ayude a otras personas.

para ubuntu 18.04:

sudo sed -i -e 's|showexec|\x00\x00\x00\x00\x00\x00\x00\x00|g' /usr/lib/udisks2/udisksd
Derek Redfern
fuente
3

En última instancia, la cuestión parece ser que udisksse monta el sistema de archivos con la showexecopción, la prevención de cualquier archivo que no terminan en .exe, .bato .comque se ejecute.

Aquí puede encontrar una pregunta relacionada (cómo dar opciones de montaje personalizadas a los udiscos): ¿Cómo configurar para grabar datos para pendrive instantáneamente? Resulta que puedes usar la udevconfiguración para hacer eso.

¿Es realmente imposible configurar las opciones de montaje predeterminadas para los udiscos? propone otra solución basada en udisks-glue, pero parece menos convincente, ya que en última instancia depende udisks, por lo que parece que puede agregar opciones, pero no eliminarlas, y en particular showexectodavía está allí).

En cualquier caso, tiendo a preferir eso a parchear un archivo binario.

Virgile
fuente
2

Ninguna de las soluciones mostradas funcionó hasta donde pude obtener un programa que escribí como un programa de terminal de Linux para ejecutar en mi partición FAT32, pero cambiar el nombre de archivo del programa para incluir la extensión .exe funcionó (gracias por el consejo) , todo lo que hice fue cambiar el nombre de filename a filename.exe para el programa de terminal que estaba tratando de ejecutar en una partición FAT32 y luego desmontarlo, volver a montarlo y configurar los permisos del disco para permitir la ejecución, luego ir al nombre de archivo. exe y establezca sus permisos y luego la marca de verificación se pegaría en lugar de volver a un signo menos, y cuando configuré la ruta e ingresé ./filename.exe en el indicador de terminal, el programa se ejecutó como debería y muestra la línea de comando que incluye el nombre del archivo .exe como se ingresó, aunque el directorio de archivos de Ubuntu muestra el archivo como MSDOS / Windows, se ejecuta como un programa Linux.

Dan Hudgins
fuente
1

Entonces encontré una solución mucho más simple (y más segura).

Use gparted para formatear el USB FAT32 y luego us Partition => Manage Flags para configurar las siguientes banderas: boot, lba

MrSteve
fuente
0

Puedes usar el umask=000modo:

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

Fuente: wiki.linuxquestions.org , sección "Opciones de montaje para fat" en mount (8) .

pevik
fuente
-1

Si la sintaxis es bash ...

bash yourscript
Sergio Abreu
fuente