web-dev-qa-db-fra.com

Action "Eject usb-drive" pour pcmanfm

Je me demande s’il existe un moyen de créer une action pcmanfm personnalisée pour éjecter une clé USB dans lubuntu? J'ai essayé de faire cela avec disksctl mais l'option --object-path me donne cette erreur:

(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

Et il n'y a pas de différence entre les types MIME entre un dossier simple et un lecteur monté, l'action "Eject" apparaît donc sur tous les dossiers.

Mise à jour

Eh bien, il semble que j'ai trouvé une solution. Ceci démontera et éteindra votre clé usb

[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

Aussi, vous pouvez l'utiliser sans l'invite gksudo après avoir ajouté setuid à /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

Mais cette action sera affichée sur tous les dossiers. Je ne sais toujours pas comment faire la différence entre répertoire usb-drive et répertoire flash-drive. J'ai vu la spécification Basenames pour l'entrée .desktop qui spécifie le nom de fichier sélectionné (utilisé dans action de corbeille vide ). Il peut donc y avoir un moyen de spécifier le placement de fichier?

Mise à jour 2

D'accord, j'ai trouvé le type MIME approprié selon base de données MIME-info - inode/mount-point, mais l'action ne s'affiche plus dans aucun répertoire. Qu'est-ce qui peut causer un problème?

[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
2
Nicholas V.

J'ai fait plus de progrès à ce sujet, mais la solution n'est toujours pas idéale:
J'utilise Lubuntu 16.04 avec PCManFM 1.24. Pour les clés USB, j'obtiens "Ejecter le support amovible", mais pour les lecteurs de disque USB, je ne reçois pas "Retirer le disque en toute sécurité" comme vous le faites dans Nautilus (je ne récupère que le démontage).
Le premier problème consiste à obtenir un contexte de clic droit sur les périphériques où, malheureusement, les actions ne sont pas prises en charge pour les périphériques dans le volet gauche de PCManFM (ou Nautilus, mais les actions fonctionnent dans le volet gauche de Nemo, mais les actions sont implémentés différemment dans Nemo). J'ai un problème avec cela en affichant l'icône "Périphériques" dans le volet de gauche en cochant "Périphériques" sous "Afficher dans les emplacements" dans Édition-Préférences-Mise en page, où vous pouvez ensuite cliquer avec le bouton droit de la souris sur le périphérique dans le volet de droite. comme indiqué dans le lien ci-joint: périphériques pcmanfm clic droit sur l'image

Le deuxième problème concerne le script permettant de supprimer le lecteur en toute sécurité: l'argument transmis à l'action script dans l'exemple ci-dessus est le suivant: ordinateur: ///ST1000LM010-9YH146.drive (ou simplement ST1000LM010-9YH146 avec% w), ce qui n'est pas idéal - ce que je ne fais pas. croire qu’il identifie de manière unique et unique le lecteur car il ne comprend pas le numéro de série. Ci-dessous, le résultat 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 

Donc, mon script correspond au modèle, supposons donc que vous n'avez pas deux appareils identiques branchés pour le prendre. Pour implémenter le script, créez le fichier ~/.local/share/filemanager/actions/eject.desktop
contenant:

[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

J'ai mis le script, eject.sh, spécifié par "Exec" dans ~/.local/share/gestionnaire de fichiers/actions, mais notez que vous ne pouvez pas utiliser "~" ou "$ HOME" dans un fichier de bureau. Vous devez donc spécifier complete chemin comme je l'ai fait ci-dessus

Le script eject.sh devrait contenir:

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
1
Mike Bounds

Ma suggestion est d'utiliser la commande umount.

Avec la commande fdisk -l et en insérant différents lecteurs USB identifiés comme tels, identifiez-les comme /dev/sdd1

Avant de créer les actions (fichier.desktop), créez son répertoire:

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

Créez et éditez le fichier d'action (umount.desktop) en utilisant ces commandes de terminal, une par une:

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

Collez le contenu ci-dessous dans 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
1
kyodake

Cette réponse utilise pcmanfm, mais j’ai trouvé que c’était le plus pratique. TL; DR; utilisez lxpanel pour ajouter une icône à gnome-disks.

En détails:

Dans lxpanel, cliquez avec le bouton droit de la souris et sélectionnez "Ajouter/Supprimer des éléments de panneau". Ajoutez une nouvelle "barre de lancement d'application" et positionnez-la avant (ou quelque part autour de "l'horloge numérique) qui devrait déjà être là. Dans la "Barre de lancement de l'application" récemment ajoutée, ajoutez comme application les "Préférences/Disques". Ceci est l'application gnome-discs fournie avec Lubuntu.

Si vous avez besoin d'utiliser vos disques, cliquez simplement sur l'icône Disks du panneau. Vous sélectionnez le disque et éteignez dans le menu du haut.

C’est la même chose que pratique comme "Retirer le matériel en toute sécurité" dans le système d’exploitation Windows, et ce qui précède le positionne plus ou moins au même endroit que Windows l’a placé sur le bureau.

0
ppp

Votre commande

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

est faux.

/media/user/Flash-Drive n'est pas un chemin d'objet.


  1. Trouvez le chemin de l'objet avec cette commande:

    $ 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. Prenez le noeud /org/freedesktop/UDisks/devices/sdc1 via:

    (remplacez '/\/media\/user\/Flash-Drive/' par votre chemin).

    $ 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. et démonter avec

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

    ou comme AllInOne (remplacez '/\/media\/user\/Flash-Drive/' par votre chemin)):

    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 []
    
0
A.B.