Como executo um arquivo de uma unidade USB FAT?

12

Estou tentando instalar um aplicativo portátil no meu drive USB, para que seja compatível com o Ubuntu e o Windows (especificamente, um programa chamado eToys). O suporte já está embutido no aplicativo para ambos os sistemas operacionais - existe etoys.shpara o Ubuntu e etoys.exepara o Windows. Decidi instalar em uma unidade FAT, pois isso pode ser lido nos dois sistemas. Isso funciona bem no Windows, mas por algum motivo não consigo executar o etoys.sh no Ubuntu.

O problema não está no arquivo - quando toda a pasta é copiada para o disco rígido local, o aplicativo funciona muito bem no Ubuntu. Mas quando tento executá-lo a partir do USB, ele abre o arquivo em um editor de texto.

Tentei executá-lo em um terminal, mas recebi a mensagem Permissão negada.

Eu tive o mesmo problema com outros executáveis ​​também.

Existe uma maneira fácil de executar coisas de um pendrive?

Derek Redfern
fonte
2
Pergunta relacionada aqui: askubuntu.com/questions/23108/…
luri

Respostas:

20

Devido às limitações do sistema de arquivos FA32, você não pode.

Agora, você pode trapacear:

  1. ou ligue em sh etoys.shvez de./etoys.sh
  2. se desejar, você pode até criar outro script (que poderia estar no seu disco rígido, por exemplo) que simplesmente chama seu script na unidade USB:

    #!/bin/bash
    sh /media/USB/etoys.sh
    
Stefano Palazzo
fonte
Muito obrigado! O segundo truque é certamente uma opção, e eu vou manter isso em mente. Como alternativa, existe outro sistema de arquivos que eu poderia usar que funcionasse com o Windows e o Ubuntu e me permitisse executar arquivos?
Derek Redfern
Você pode usar ext2 ou ext3, mas precisa instalar um pequeno utilitário no Windows para fazê-lo funcionar.
Mais uma pergunta sobre isso - eu decidi ir com a opção de criar um script no disco rígido e funciona muito bem. Mas também quero ter scripts para programas que não são arquivos .sh - por exemplo, Portable Chromium, que é do tipo "executável (application / x-executable)". O uso de sh não funciona e o ./Chromium ainda dá permissão negada. Existe outro comando para usar para isso?
Derek Redfern
Humm, acho que você pode trapacear: antes de executar o cromo, você pode chmod para torná-lo executável. Desde o comando chmod será chamado cada vez, não faz mais questão de que as permissões não são realizadas na próxima vez que você inserir o drive USB
Eu pensei que você não poderia chmod no FAT, apesar de não suportar permissões Unix.
Derek Redfern
8

A montagem do dispositivo -o mode=<value>deve funcionar

mode=value

Defina o modo de todos os arquivos como valor e 0777desconsiderando as permissões originais. Adicione permissão de pesquisa aos diretórios que têm permissão de leitura. O valor é dado em octal.

Bonsi Scott
fonte
1
Devo definir isso no fstab?
Derek Redfern
@Bonsi Scott Não há mode=opção para vfat, veja mount (8) .
pevik
6

Na verdade, encontrei uma ótima solução em http://ubuntuforums.org/showthread.php?t=1665289 que resolveu o problema.

Basicamente, ele diz para executar o comando

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

e isso impedirá a montagem automática de discos com a opção showexec.

Não gosto de responder à minha própria pergunta, mas isso funcionou para mim e espero que ajude outras pessoas também.

para o ubuntu 18.04:

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

Em última análise, a questão parece ser que udisksmonta o sistema de arquivos com a showexecopção, impedindo qualquer arquivo que não terminam em .exe, .batou .compara ser executado.

Uma pergunta relacionada (como fornecer opções personalizadas de montagem para udisks) pode ser encontrada aqui: Como configurar para gravar dados no pendrive instantaneamente? Acontece que você pode usar a udevconfiguração para fazer isso.

A configuração de opções de montagem padrão para udisks é realmente impossível? propõe outra solução com base em udisks-glue, mas parece menos convincente, pois depende em última instância udisks, para que você possa adicionar opções, mas não removê-las e, em particular, showexecainda esteja lá).

Em qualquer caso, eu tendem a preferir isso ao patch de um arquivo binário.

Virgile
fonte
2

Nenhuma das soluções mostradas funcionou tanto quanto eu poderia dizer para que um programa que eu escrevi como um programa de terminal Linux fosse executado na minha partição FAT32, mas alterar o nome do arquivo do programa para incluir a extensão .exe funcionou (obrigado pela dica) , tudo o que fiz foi renomear o nome do arquivo para filename.exe para o programa do terminal que estava tentando executar em uma partição FAT32 e, em seguida, desmontá-lo, montá-lo novamente e definir as permissões de disco para permitir a execução, depois vá para o nome do arquivo. exe e defina suas permissões e, em seguida, a marca de seleção ficaria em vez de voltar a um sinal de menos, e quando eu defino o caminho e digitei ./filename.exe no prompt do terminal, o programa foi executado como deveria e mostra a linha de comando, incluindo o nome do arquivo .exe conforme inserido, embora o diretório de arquivos do Ubuntu mostre o arquivo como MSDOS / Windows, ele é executado como um programa Linux.

Dan Hudgins
fonte
1

Então, achei uma solução muito mais simples (e mais segura).

Use gparted para formatar o USB FAT32 e, em seguida, us Partition => Manage Flags para definir os seguintes sinalizadores: boot, lba

MrSteve
fonte
0

Você pode usar o umask=000modo:

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

Fonte: wiki.linuxquestions.org , seção "Opções de montagem para gordura" no mount (8) .

pevik
fonte
-1

Se a sintaxe for bash ...

bash yourscript
Sergio Abreu
fonte