KDE, монтирование дисков, кодировка

Note: This info is outdated.
Внимание: Эта информация устарела.

Пересадил жену из Гнома в КДЕ (3.5). В первую очередь из-за убожества под названием Наутилус, который используется в Гноме в качестве файл-менеджера.

Ну и столкнулся во всей красе со странными опциями монтирования при монтировании флешек из конкверора.

Итак, для монтирования используется hal. Hal, в общем-то, настроен так, чтобы vfat монтировался с iocharset=,codepage=:

gq@vice:~$ cat /etc/hal/fdi/policy/codepage.fdi
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
<deviceinfo version="0.2">
<device>
<match key="volume.fstype" string="vfat">
<merge key="volume.policy.mount_option.utf8" type="bool">false</merge>
<merge key="volume.policy.mount_option.iocharset=koi8-r" type="bool">true</merge>
<merge key="volume.policy.mount_option.codepage=866" type="bool">true</merge>
</match>
</device>
</deviceinfo>

И pmount-hal монтируется все правильно:

gq@vice:~$ PMOUNT_DEBUG=1 pmount-hal `hal-find-by-property --key volume.fstype --string vfat`
drive: /org/freedesktop/Hal/devices/storage_serial_JetFlash_TS1GJF2B_6110074164F2F66B
volume: /org/freedesktop/Hal/devices/volume_uuid_4CEA_FA17
device: /dev/sdd1
label: JETFLASH
fstype: vfat
options: codepage=866,iocharset=koi8-r
umask: (null)
spawnv(): executing pmount ‘pmount’ ‘-t’ ‘vfat’ ‘-c’ ‘koi8-r’ ‘/dev/sdd1′ ‘JETFLASH’
spawn(): pmount terminated with status 0

Но вот KDE на это сильно наплевать, он монтирует с непонятно откуда берущимися опциями:

gq@vice:~$ mount | grep JETFLASH
/dev/sdd1 on /media/JETFLASH type vfat (rw,noexec,nosuid,nodev,noatime,uid=1000,utf8,shortname=lower)

Начал отлаживать. Konqueror вызывает kio_media_mounthelper. Этот бинарник поставляется пакетом kdebase-kio-plugins. Скачал исходники. Оказалось и впраду, при монтировании KDE не смотрит на volume.policy.mount_option, а параметры там берутся из настроек, которые доступны по правой кнопке мыши на сменном носителе. Вот только возможности глобальной настройки там нету, а даже если бы и была - там нет возможности задать codepage и iocharset.

Такая вот фигня. В принципе я понимаю, почему они используют свой механизм задания опций - хочется тотального гуя, но все же, игнорировать настройки hal, это как-то не комильфо.

Рисую патч.

Upd: оказывается там все еще запутанней. volume.policy.mount_option вроде как deprecated =\ Написал в список рассылки hal - посмотрим, что они скажут, и, в случае чего, это будет временный патч, “чтобы русский работал”.

Баг на тему в багтрекере КДЕ: http://bugs.kde.org/show_bug.cgi?id=133456
В списке рассылки пока молчат =\.

Upd2: Нарисовал патч.

RSS feed | Trackback URI

21 Comments »

+ Comment by Jay Subscribed to comments via email
2007-01-23 23:12:08

Сегодня с удивлением обнаружил этот же эффект.. Сначала думал, что это недостаток реализации именно в KDE на FreeBSD. Не могли бы вы держать меня в курсе данной ситуации?
Заранее благодарен!


Jay

+ Comment by GQ
2007-01-24 00:00:06

Я в этой записе напишу если какие новости будут. В конец добавил ссылку на баг в KDE.

 
+ Comment by GQ
2007-01-25 22:39:39

Патч написал.

+ Comment by Jay Subscribed to comments via email
2007-01-26 16:05:23

Если не трудно - отправьте мне на мыл.. а то обратно на fstab + kwikdisk переходить не прет совершенно..


Jay

+ Comment by GQ
2007-01-26 19:11:51

Смотри следующую запись в блоге.

 
 
 
 
+ Comment by aivs
2007-02-20 18:40:35

А для 3.5.6 патч будет?

+ Comment by GQ
2007-02-20 23:48:53

А он на нее разве не накладывается? я внимательно не смотрел, но мне казалось, что должно - там почти никаких изменений не было. На всякий случай - патч относительно 3.5.5a

 
 
+ Comment by singl Subscribed to comments via email
2007-08-04 10:15:11

А я сделал так:
Создал три файла (media_mount_cd.desktop, media_mount_disk.desktop и media_mount_floppy.desktop) в кодировке utf8 и поместил их в /opt/kde3/share/apps/konqueror/servicemenus/
Содержимое файлов:

— media_mount_cd.desktop —
[Desktop Action Монтировать в кириллице]
Exec=kio_media_mounthelper -u %u; mkdir /media/cd; mount /dev/hdc /media/cd -o iocharset=cp1251; konqueror %u
Icon=cdrom_mount
Name=Монтировать в кириллице
[Desktop Entry]
Actions=Монтировать в кириллице
ServiceTypes=media/cdrom_unmounted,media/cdwriter_unmounted,media/dvd_unmounted

— media_mount_disk.desktop —
[Desktop Action Монтировать в кириллице]
Exec=kio_media_mounthelper -u %u; mkdir /media/disk; mount /dev/sda1 /media/disk -o iocharset=cp1251; mount /dev/sdb1 /media/disk -o iocharset=cp1251; konqueror %u
Icon=usbpendrive_mount
Name=Монтировать в кириллице
[Desktop Entry]
Actions=Монтировать в кириллице
ServiceTypes=media/removable_unmounted,media/camera_unmounted

— media_mount_floppy.desktop —
[Desktop Action Монтировать в кириллице]
Exec=kio_media_mounthelper -u %u; mkdir /media/floppy; mount /dev/fd0 /media/floppy -o iocharset=cp1251; konqueror %u
Icon=3floppy_mount
Name=Монтировать в кириллице
[Desktop Entry]
Actions=Монтировать в кириллице
ServiceTypes=media/floppy5_unmounted,media/floppy_unmounted

Теперь при монтировании достаточно выбрать в меню “Монтировать в кириллице” и всё OK.

PS. Система OpenSUSE 10.2, системная кодировка CP1251. Если у Вас другая система или кодировка, то отредактируйте эти файлы.

+ Comment by GQ
2007-08-04 15:31:40

И что будет, когда ты воткнешь флэшку без таблицы разделов? Или когда воткнешь 3 флэшки? Или когда подключишь читалку всяких SD CompactFlash и т.п.
В общем это костыли. Правильный способ - это все-таки HAL.

 
 
+ Comment by Стас Subscribed to comments via email
2007-08-10 15:06:33

Люди добрые, подскажите. Установил SLackware Linux 12, с ним идет HAL 0.5.9, KDE 3.5.7.
версии софта новее, а проблема такаяже
на сколько я понимаю у меня HAL более новый, на сколько он совместим с этим патчем? как лутше поступить? если я пересоберу ядро с указанием кодировок, это поможет?

+ Comment by GQ
2007-08-11 17:59:04

У меня все работает (KDE 3.5.7, HAL 0.5.9.1).

 
 
+ Comment by Stas Subscribed to comments via email
2007-08-11 23:20:26

Хм… странно, а какая у тебя конфигурация?
у меня Слака, 12ая, я ее руссифицировал (во всяком случае мне так кажется:)
локаля поставил KOI8-R
проблем с русским в другом софте не наблюдалось
(нет, были пляски с бубном в сетевых ресурсах самба, но man libsmbclient спас)
а вот кодировки в автомонтировании победить я так и не смог, в итоге пересоьрал ядро где явно указал 866 для фата и кои8р для локали
обе проблемы я описал у себя в блоге
http://skonev.blogspot.com/2007/08/salckware-linux-12-kde.html
посмотри пожлауйста, может я в чемто не прав, подскажешь?

+ Comment by GQ
2007-08-13 15:54:27

Всё работает - в смысле патч накладывается. Кстати пересобирать надо не весь кде, а только kdebase.

 
 
+ Comment by bam Subscribed to comments via email
2007-08-14 02:07:37

эх, бинарничек бы мне для слакваря 12 …

+ Comment by Стас Subscribed to comments via email
2007-08-14 10:22:38

Эх, никто не собрал? попробую сам на выходных, в этом деле новичек

+ Comment by bam Subscribed to comments via email
2007-08-14 23:07:12

вот был бы тебе признателен, а то самому уж больно неохота возиться, хоть режь. Кстати, в идеале такой пакет пропатченый хорошо бы закинуть куда-нибудь типа linuxpackages.net . Но это я уж размечтался :)

 
 
 
+ Comment by Стас Subscribed to comments via email
2007-08-14 23:42:00

Я сейчас веду неравный бой в слаке со своей видеокартой, если к выходным спарвлюсь, на выходных пакет соберу, ну я тут еще отпишусь по ходу событий

 
+ Comment by Kernel Panic Subscribed to comments via email
2008-03-06 00:37:54

Столкнулся с такой же проблемой, когда решил в своем Дебиане сделать локаль ru_RU.KOI8-R.
Короче, попарился денек и скриптик сворганил.
Для тех, кому лень заниматься пропатчиванием KDE, думаю данный скриптик будет в самый раз. Он практически ничем не ограничивает (по крайней мере, я не нашел такого извратного способа монтирования, при котором получил бы отказ).

Итак, при монтировании независимо от того, через хал мы монтируем или через другое “место”, все-равно юзается бинарник /bin/mount, куда посылаются параметры монтирования.
Предлагаю создать папку /bin/trying и переместить данный бинарник туда, а вместо него в папке /bin создать исполяемый скриптик с именем mount следующего содержания:


#!/bin/bash
# Change Additional mount options with IOCHARSET and CODEPAGE you need :)
# Additional mounting options (cyrillic correction)
additional_options=",iocharset=koi8-r,codepage=866"

# Use correction
vfat=0

# Result Message (was used for debuging)
message=""

# Maximum parameters count
Num=0

# Filling the array of input parameters
for input_param in $*
do
let "Num++" # Increment Num
params[$Num]=$input_param
done

# Main checking cycle (check mount input parameters)
for ((i=1; i <= Num ; i++))
do
# Checking if FS type specified
if [ ${params[$i]} = “-t” ]; then
if [ ${params[$i+1]} = “vfat” ]; then
let “vfat = 1″
let “i++”
message=$message”Found FSType VFAT (additional mount options ON). ”
fi
# Checking if Mounting Options specified
elif [ ${params[$i]} = “-o” ]; then
let “i++” # go to the next parameter (mount options themself)
params[$i]=${params[$i]}”$additional_options” # update mount options
fi
done

# This part makes mounting with additional parameters or with standard parameters depending
# on filesystem type
if [ $vfat -eq 1 ]; then
# Filling new mount options
parameters=”
for (( i=1; i <= Num; i++ ))
do
parameters=$parameters”${params[$i]} ”
done
# mount
/bin/trying/mount $parameters
else
/bin/trying/mount $*
fi

Удачного вам монтирования ;)
У меня отлично работает без патчей.

 
+ Comment by Kernel Panic Subscribed to comments via email
2008-03-10 02:29:04

да, чуть не забыл, чтоб это работало, надо перед монтированием флешки убрать галочку в опциях “кодировка UTF-8″. Это можно сделать, нажав правой кнопкой мыши на устройстве (в system:/media/) и выбрав “Свойства”, а далее вкладку “Монтирование”

+ Comment by GQ
2008-03-16 11:42:08

А вот это уже зло.
Да и скрипт не маленький и не тривиальный, в отличие от патча. И нарушает пакетную систему. =\

+ Comment by Kernel Panic Subscribed to comments via email
2008-04-02 21:55:46

Зато не требуется кеды компилить и ставить заново.
Я ж не заставляю его юзать, это просто вариант решения проблемы ;)

PS: Сделанное своими руками для удовлетворения собственных потребностей злом не считаю :)

 
 
 

Identify yourself with

or fill the following fields:

You may use <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> in your comment.

Trackback responses to this post