Интересно, есть ли способ создать собственное действие 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, которая указывает выбранное имя файла (используется в действие пустого мусора ), так что может быть есть какой-то способ указать размещение файла?
Хорошо, я нашел подходящий 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
Мое предложение должно использовать эти 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
Ваша команда
udisksctl unmount --object-path /media/user/Flash-Drive
является неправильным.
/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="};" '/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';
Возьмите узел /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
и размонтирование с
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 []
Я сделал больше успехов на этом, но решение все еще не идеально:
Я использую 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
Этот ответ действительно использует pcmanfm, но я нашел, что это - самое удобное. TL; DR; используйте lxpanel для добавления значка к дискам гнома.
В деталях:
В lxpanel щелкают правой кнопкой и выбирают, 'Добавьте / Удаляют Объекты Панели. Добавьте новую 'Панель запуска Приложения' и расположите ее прежде (или где-нибудь вокруг) 'Электронные часы', которые уже должны быть там. В недавно добавленной 'Панели запуска Приложения' добавляют как приложение 'Предпочтения / Диски. Это - приложение дисков гнома, которое идет с Lubuntu.
, Если необходимо сделать что-то с дисками, затем просто, нажмите значок Disks в панели. Вы выбираете диск и Выключаетесь из главного меню.
Это - то же столь же удобное, как 'Безопасно удаляют аппаратные средства' в Windows OS и вышеупомянутых положениях это более или менее в том же месте, как Windows имеет его в рабочем столе.
less
, в этом случае необходимо определить --color=always
и использование less -R
для отображения цветного вывода в less
.
– Bakuriu
5 September 2016 в 03:47