“Ejete drive USB” ação para pcmanfm

2

Gostaria de saber se existe uma maneira de criar uma ação personalizada do pcmanfm para ejetar o drive usb no lubuntu? Eu tentei fazer isso com udisksctl mas a opção --object-path está me dando este erro:

(udisksctl unmount:10926): GLib-GIO-CRITICAL **: g_dbus_object_manager_get_object: assertion 'g_variant_is_object_path (object_path)' failed
Error looking up object with path /media/user/Flash-Drive

E não há diferença de tipos MIME entre pasta simples e unidade montada, de modo que a ação "Ejetar" é mostrada em todas as pastas.

Atualizar

Bem, parece que encontrei algum tipo de solução. Isso é desmontar e desligar seu usb-drive

[Desktop Entry]
Type=Action
Tooltip=Eject selected flash drive
Name=Eject flash drive
Profiles=profile-zero;
Icon=media-eject

[X-Action-Profile profile-zero]
MimeTypes=inode/directory;
Exec=gksudo eject %f
Name=Default profile

Você também pode usá-lo sem o prompt do gksudo após adicionar setuid a /usr/bin/eject :

[Desktop Entry]
Type=Action
Tooltip=Eject selected flash drive
Name=Eject flash drive
Profiles=profile-zero;
Icon=media-eject

[X-Action-Profile profile-zero]
MimeTypes=inode/directory;
Exec=eject %f
Name=Default profile

Mas esta ação será mostrada em todas as pastas. Eu ainda não tenho idéia de como fazer a diferença entre o diretório da unidade usb e o diretório da unidade flash. Eu vi a especificação Basenames para a entrada .desktop que especifica o nome do arquivo selecionado (usado em ação de lixo vazio ), pode haver alguma maneira de especificar a colocação de arquivos?

Atualização 2

Ok, eu encontrei o tipo MIME apropriado de acordo com Banco de dados MIME-info - inode/mount-point , mas agora a ação não é mostrada em nenhum diretório. O que pode causar um problema?

[Desktop Entry]
Type=Action
Tooltip=Eject selected drive
Name=Eject drive
Profiles=profile-zero;
Icon=media-eject

[X-Action-Profile profile-zero]
MimeTypes=inode/mount-point
Exec=eject %f
Name=Default profile
    
por Nicholas V. 06.06.2015 / 16:09

4 respostas

1

Minha sugestão é usar o comando umount .

Com o comando fdisk -l e inserindo diferentes drives USB determinados como identificados, digamos que eles são /dev/sdd1

Antes de criar as ações (file.desktop), crie seu diretório:

mkdir -p ~/.local/share/file-manager/actions

Crie e edite o arquivo de ação (umount.desktop) usando esses comandos de terminal, um de cada vez:

touch ~/.local/share/file-manager/actions/umount.desktop
nano ~/.local/share/file-manager/actions/umount.desktop

Cole o conteúdo abaixo em umount.desktop:

[Desktop Entry]
Type=Action
Name=Eject Usb-Drive
Icon=dialog-password
Profiles=profile-zero;

[X-Action-Profile profile-zero]
Exec=umount /dev/sdd1
Name=Default profile
    
por kyodake 06.06.2015 / 17:05
1

Fiz mais progressos, mas a solução ainda não é a ideal:
Eu estou usando Lubuntu 16.04 com PCManFM 1.24. Para pen drives USB eu recebo "Eject Removable Media", mas para unidades de disco USB, eu não recebo "Safely Remove Drive" como você faz no Nautilus (eu só recebo Unmount). A primeira questão é obter o contexto do botão direito do mouse em dispositivos onde, infelizmente, parece que não há suporte para ações no painel esquerdo do PCManFM (ou Nautilus, mas as ações funcionam no painel esquerdo do Nemo, mas as ações são implementadas de maneira diferente no Nemo ). Eu tenho um work-a-round para isso, mostrando o ícone "Dispositivos" no painel esquerdo, marcando "Dispositivos" em "Mostrar nos lugares" em Editar Preferências-Layout, onde você pode, em seguida, clique direito no dispositivo no painel direito conforme mostrado no link em anexo: dispositivos pcmanfm clique com o botão direito na imagem

A segunda questão é o script para remover a unidade com segurança: O argumento passado para o script de ação no exemplo acima é: computador: ///ST1000LM010-9YH146.drive (ou apenas ST1000LM010-9YH146 com% w) o que não é ideal - não acredito que identifique de forma única a unidade, pois ela não inclui o número de série. Abaixo está a saída de "udisksctl status":

$ udisksctl status
MODEL                     REVISION  SERIAL               DEVICE
--------------------------------------------------------------------------
WDC WD5000BEVT-22ZAT0     01.01A01  WD-WX70A9903180      sda
Kingston DataTraveler G3  1.00      001CC0EC31D0F081F6071284 sdb
ST1000LM010-9YH146        CC9F      W2M076TD             sdc 

Portanto, meu script corresponde ao modelo, portanto, você não tem dois dispositivos idênticos conectados para pegar o dispositivo. Para implementar o script, crie o arquivo ~ / .local / share / filemanager / actions / eject.desktop
contendo:

[Desktop Entry]
Type=Action
Name=Safely Remove Drive
Icon=drive-harddisk-usb
Profiles=profile-zero;

[X-Action-Profile profile-zero]
MimeTypes=inode/mount-point
Exec=/home/mike/.local/share/file-manager/actions/eject.sh %w 
Name=Default profile

Eu coloquei o script, eject.sh, especificado por "Exec" em ~ / .local / share / filemanager / actions, mas note que você não pode usar "~" ou "$ HOME" em um arquivo de desktop para que você tenha para especificar o caminho completo como eu fiz acima

O script eject.sh deve conter:

device='udisksctl status | awk -v d=$1 '
BEGIN {
    gsub("%20"," ",d)
    sub("$"," ",d)  # Add a space on the end to give a more exact match
    sub("^","^",d) # Add ^ to start to give a more exact match
    }
$0 ~ d {
    print "/dev/"$NF
    }' '
if [ "$device" == "/dev" ]
then
    echo "Removable device not found"
else
    for dev in 'df | awk -v device=$device '$1 ~ device {print $1}' '
    do
        echo "Unmounting "$dev
        udisksctl unmount -b $dev
    done

    echo "Powering off: "$device
    udisksctl power-off -b $device
fi
    
por Mike Bounds 10.08.2016 / 00:44
0

Seu comando

udisksctl unmount --object-path /media/user/Flash-Drive

está errado.

/media/user/Flash-Drive não é um caminho de objeto.

  1. Encontre o caminho do objeto com este comando:

    $ gdbus introspect --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices --recurse --only-properties | grep -E "(readonly .+ (Device(IsMounted|IsDrive|File|MountPaths) ).*|\}|.*\{)" | awk -v RS="};" '/Flash-Drive/'
    
      node /org/freedesktop/UDisks/devices/sdc1 {
        interface org.freedesktop.UDisks.Device {
            readonly as DeviceMountPaths = ['/media/user/Flash-Drive'];
            readonly b DeviceIsMounted = true;
            readonly b DeviceIsDrive = false;
            readonly s DeviceFile = '/dev/sdc1';
    
  2. Pegue o nó /org/freedesktop/UDisks/devices/sdc1 via:

    (substitua '/\/media\/user\/Flash-Drive/' pelo seu caminho).

    $ gdbus introspect --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices --recurse --only-properties | grep -E "(readonly .+ (Device(IsMounted|IsDrive|File|MountPaths) ).*|\}|.*\{)" | awk -v RS="};" '/\/media\/user\/Flash-Drive/' | awk '/node/ {print $2}'
    
    /org/freedesktop/UDisks/devices/sdc1
    
  3. e desmonte com

    gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/sdc1 --method org.freedesktop.UDisks.Device.FilesystemUnmount []
    

    Ou como AllInOne (substitua '/\/media\/user\/Flash-Drive/' pelo seu caminho):

    gdbus call --system --dest org.freedesktop.UDisks --object-path $(gdbus introspect --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices --recurse --only-properties | grep -E "(readonly .+ (Device(IsMounted|IsDrive|File|MountPaths) ).*|\}|.*\{)" | awk -v RS="};" '/\/media\/user\/Flash-Drive/' | awk '/node/ {print $2}') --method org.freedesktop.UDisks.Device.FilesystemUnmount []
    
por A.B. 06.06.2015 / 18:21
0

Esta resposta usa o pcmanfm, mas descobri que é o mais conveniente. TL; DR; use o lxpanel para adicionar um ícone aos gnome-disks.

Em detalhes:

No lxpanel, clique com o botão direito do mouse e selecione 'Adicionar / Remover itens do painel'. Adicione uma nova 'Application Launch Bar' e posicione-a antes (ou em algum lugar ao redor) 'Digital Clock' que já deveria estar lá. Na recém-adicionada 'Application Launch Bar' adicione como aplicação as 'Preferências / Discos'. Este é o aplicativo gnome-disks que vem com o Lubuntu.

Se você precisar fazer algo com seus discos, basta clicar no ícone Discos no painel. Você seleciona o disco e o Power Off no menu superior.

Isso é tão prático quanto "Remover hardware com segurança" no sistema operacional Windows, e o acima o posiciona mais ou menos no mesmo local que o Windows no desktop.

    
por ppp 13.09.2016 / 13:30