Меню пользователя
Имя пользователя
Пароль
Запомнить меня
Поиск по сайту
Вход пользователей
Пользователь:

Пароль:

Запомнить меня

Забыли пароль?

Регистрация
Поиск
Кто активен
8 пользователь(ей) активно (7 пользователь(ей) просматривают Open Форум)

Участников: 0
Гостей: 8

далее...
Уважаемые пользователи форума! Внимание!
Темы, озаглавленные бездумно и не ясно для кого, изобилующие БОЛЬШИМИ БУКВАМИ, "!!!" или "???", нарушающие правила, написанные корявым русским языком, содержащие оскорбления, рекламу или клевету, написанные вне тематических разделах Форума, - будут закрываться или удаляться без специального предупреждения, а их Авторы будут удаляться или отправляться в бан! Надеемся на вашу сознательность и уважение к себе и ко всем участникам форума.
:: Правила Форума :: - - :: ББ-коды для использования на форуме ::
Сообщение: *
 
* = Обязательное поле

Кодировка имен файлов в КДЕ на CD/DVD, FLOPPY, FLASH

Заголовок темы: Кодировка имен файлов в КДЕ на CD/DVD, FLOPPY, FLASH
Отправитель: SwitNJ 27/11/2008 18:24:14

Внимание всех, кто по разным причинам использует системную локаль отличную от UTF8!
Послу долгих ковыряний в сети и многодневных экспериментов удалось побороть проблему, которая имеется в КДЕ3, связанную с неправильным отображением присоединяемых устройств, а именно компакт и двд дисков, флешек и дискет. На счет внешних винчестеров - не гарантирую, тут все очень неавтоматически, но вполне может сказаться что и сработает!

В моей системе установлена локаль ru_RU.CP1251,
посему везде указываю для себя iocharset=cp1251. Для других локалей прописывайте там свою!

1) идем в папку /bin и создаем там подпапку /trying.
переносим файл /bin/mount в нее, то есть будет теперь /bin/trying/mount

2) создаем в /bin обработчик монтирования для флешек:
текстовый файл /bin/mount

#!/bin/bash
# Change Additional mount options with IOCHARSET and CODEPAGE you need
# Additional mounting options (cyrillic correction)
additional_options=",iocharset=cp1251,codepage=1251"
echo $*
# 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"
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/mount_sr0 $*
fi
echo $parameters

3) аналогично далее для cd-rom (если монтируется по имени sr0)
текстовый файл /bin/mount_sr0

#!/bin/bash
# Change Additional mount options with IOCHARSET and CODEPAGE you need
# Additional mounting options (cyrillic correction)
additional_options=",iocharset=cp1251"
echo $*
# 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]} = "/dev/sr0" ]; then
if [ ${params[$i]} = "/dev/sr0" ]; then
let "vfat = 1"
let "i++"
message=$message"Found FSType CDROM"
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/mount_cdrom $*
fi
echo $parameters

4) аналогично далее для cd-rom (если монтируется по имени cdrom)
текстовый файл /bin/mount_cdrom

#!/bin/bash
# Change Additional mount options with IOCHARSET and CODEPAGE you need
# Additional mounting options (cyrillic correction)
additional_options=",iocharset=cp1251"
echo $*
# 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]} = "/dev/cdrom" ]; then
if [ ${params[$i]} = "/dev/cdrom" ]; then
let "vfat = 1"
let "i++"
message=$message"Found FSType CDROM"
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/mount_fd0 $*
fi
echo $parameters

5) аналогично для дисковода (имя /dev/fd0)
текстовый файл /bin/mount_fd0

#!/bin/bash
# Change Additional mount options with IOCHARSET and CODEPAGE you need
# Additional mounting options (cyrillic correction)
additional_options=",iocharset=cp1251"
echo $*
# 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]} = "/dev/fd0" ]; then
if [ ${params[$i]} = "/dev/fd0" ]; then
let "vfat = 1"
let "i++"
message=$message"Found FSType FLOPPY"
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
echo $parameters


всем этим файлам нужно присовить владельца root:root
и дать права на выполнение для всех и запись только для рута, остальным на чтение

как видно эти скриптовые файлики ссылаются друг на друга, то есть при вызове команды mount идет проверка параметров по цепочке - сначала для устройств с явно указаной системой vfat (флешки и разделы винчестера), затем оптические устройства по имени вначале для sr0 (для opensuse 11.0 - дефолтное имя в HAL) затем по имени cdrom, а затем для флоппи привода (дисковода).

Естественно расчитано это все только на то, что приводов по одной штуке в системе, то есть еслли несколько дисководов или оптических приводов - естественно нужно расширять скрипты.

После того как эти файлы созданы и им назначены соответствующие права - работает все на ура!

ЕДИНСТВЕННОЕ УСЛОВИЕ: при первом использовании устройства нужно в конквероре правой кнопкой мыши вызвать свойства тома, найти опции монтирования и убрать галочку с "монтировать в UTF8" - только после этого имена будут показываться правильно.
Для умников: Без скриптов эта галочка до одного места, так как КДЕ плевать хотел на то, что если не используется УТФ8, то по логике нужно прописать -o iocharset=<locale> . Если бы он это делал все работало бы искаропки, как говорится.

Теперь просьба: товарищи, которые сильны в написании bash-скриптов и их отладке! Пожалуйства, оптимизируйте эти скрипты по возможности до одного файла с интуитивно понятным описанием внутри, а то я как-бы понять могу, но сам исправить - не шарю

open-suse.ru