Действие «Извлечь USB-накопитель» для pcmanfm

Интересно, есть ли способ создать собственное действие pcmanfm для извлечения usb-накопителя в lubuntu? Я пытался сделать это с udisksctl , но опция --object-path дает мне эту ошибку:

(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

И нет никаких различий в MIME-типах между простой папкой и подключенным диском поэтому действие «Извлечь» отображается во всех папках.

Обновление

Ну, похоже, я нашел какое-то решение. Это размонтирует и отключит питание вашего 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

Также вы можете использовать его без приглашения gksudo после добавления 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

Но это действие будет показано на всех папках. Я до сих пор не знаю, как сделать разницу между каталогом usb-drive и каталогом flash-drive. Я видел спецификацию Basenames для записи .desktop, которая указывает выбранное имя файла (используется в действие пустого мусора ), так что может быть есть какой-то способ указать размещение файла?

Обновить 2

Хорошо, я нашел подходящий MIME-тип в соответствии с MIME-info Database - inode/mount-point, но теперь действие не отображается ни в одном каталоге. Что может вызвать проблемы?

[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
задан 7 June 2015 в 12:50

4 ответа

Мое предложение должно использовать эти umount команда.

С эти fdisk -l команда и вставка различных карт памяти, определенных, как определено, скажите, что они /dev/sdd1

Прежде, чем создать действия (file.desktop), создают его каталог:

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

Создают и редактируют файл действия (umount.desktop) при помощи этих терминальных команд по одному:

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

Вставка ниже содержания в 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
0
ответ дан 7 June 2015 в 12:50

Ваша команда

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

является неправильным.

/media/user/Flash-Drive не контур объектов.


  1. Найдите контур объектов с этой командой:

    $ 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. Возьмите узел /org/freedesktop/UDisks/devices/sdc1 через:

    (замена '/\/media\/user\/Flash-Drive/' с Вашим путем).

    $ 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. и размонтирование с

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

    Или как AllInOne (замена '/\/media\/user\/Flash-Drive/' с Вашим путем):

    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
ответ дан 7 June 2015 в 12:50

Я сделал больше успехов на этом, но решение все еще не идеально:
Я использую Lubuntu 16.04 с PCManFM 1.24. Для USB, которым управляет перо, я добираюсь, "Извлекают Съемные носители", но для дисководов USB, я не добираюсь, "Безопасно Удаляют Диск", как Вы делаете в Наутилусе (я только получаю Размонтирование).
Первый выпуск должен добраться, щелкают правой кнопкой по контексту по устройствам, где к сожалению, кажется, что действия не поддерживаются для устройств в левой панели в PCManFM, (или Наутилус, но работа действий в левой панели в Немо, но действия реализованы по-другому в Немо). У меня есть обходное решение к этому путем показа значка "Devices" в левой панели путем отметки "Устройств" под "Шоу в Местах" в Предпочтительном Расположении Редактирования, где можно затем щелкнуть правой кнопкой по устройству на правой панели как показано в приложенной ссылке: устройства pcmanfm щелкают правой кнопкой по изображению

Вторым выпуском является сценарий для безопасного удаления диска: аргумент, переданный сценарию действия в вышеупомянутом примере: computer:///ST1000LM010-9YH146.drive (или просто ST1000LM010-9YH146 с %w), который не идеален - я не полагаю, что он равномерно однозначно определяет диск, поскольку он не включает порядковый номер. Ниже производится от "udisksctl состояние":

$ 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 

Таким образом, мой сценарий соответствует модели, поэтому предполагает, что у Вас нет 2 идентичных устройств включенными для взятия устройства. Для реализации сценария создают файл ~/.local/share/filemanager/actions/eject.desktop
содержа:

[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

Я поместил сценарий, eject.sh, указал "Должностным лицом" в ~/.local/share/filemanager/actions, но отмечаю, что Вы не можете использовать "~" или "$HOME" в файле на рабочем столе, таким образом, необходимо указать полный путь, поскольку я сделал выше

Сценарий eject.sh должен содержать:

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
ответ дан 7 June 2015 в 22:50
  • 1
    Спасибо за ответ, но that' s не это. Как я уже сказал, мой DNS установлены правильно. Работы ping, wget работы, мои DNSes являются Google так it' s (сервер имен 8.8.4.4 сервера имен 8.8.8.8) у меня также есть полные полномочия управлять интерфейсом wlan, я могу открыться/закрыть его и настроить его от chroot. – meat 5 September 2016 в 05:05

Этот ответ действительно использует pcmanfm, но я нашел, что это - самое удобное. TL; DR; используйте lxpanel для добавления значка к дискам гнома.

В деталях:

В lxpanel щелкают правой кнопкой и выбирают, 'Добавьте / Удаляют Объекты Панели. Добавьте новую 'Панель запуска Приложения' и расположите ее прежде (или где-нибудь вокруг) 'Электронные часы', которые уже должны быть там. В недавно добавленной 'Панели запуска Приложения' добавляют как приложение 'Предпочтения / Диски. Это - приложение дисков гнома, которое идет с Lubuntu.

, Если необходимо сделать что-то с дисками, затем просто, нажмите значок Disks в панели. Вы выбираете диск и Выключаетесь из главного меню.

Это - то же столь же удобное, как 'Безопасно удаляют аппаратные средства' в Windows OS и вышеупомянутых положениях это более или менее в том же месте, как Windows имеет его в рабочем столе.

0
ответ дан 7 June 2015 в 22:50
  • 1
    @BharadwajRaju Кроме тех случаев, когда Вы передаете его по каналу к чему-то как less, в этом случае необходимо определить --color=always и использование less -R для отображения цветного вывода в less. – Bakuriu 5 September 2016 в 03:47

Другие вопросы по тегам:

Похожие вопросы: