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.
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?
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
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
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
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.
Votre commande
udisksctl unmount --object-path /media/user/Flash-Drive
est faux.
/media/user/Flash-Drive
n'est pas un chemin d'objet.
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';
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
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 []