Кодировка имен файлов в КДЕ на 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-скриптов и их отладке! Пожалуйства, оптимизируйте эти скрипты по возможности до одного файла с интуитивно понятным описанием внутри, а то я как-бы понять могу, но сам исправить - не шарю |