Ru-Board.club
← Вернуться в раздел «UNIX»

» Отображение русских имен файлов в Linux

Автор: G_V_G
Дата сообщения: 22.11.2010 10:10
Всем добрый день!
Нужна помощь в отображении русских имен файлов в Linux.
Приобрел я девайс Iomega StorCenter ix2-200, в надежде просматривать мультимедийным плеером с него фильмы, фото музыку. Но оказалось, что при открытии с него списка файлов все русские имена отображаются абракадаброй. При просмотре же с компьютера (Win XP) имена отображаются корректно.

Поковырявшись в интернете оказалось, что в девайсе есть SSH.
Вот что мне удалось получить.

root@Storage:/# uname -a
Linux Std-Storage 2.6.22.18 #1 Mon Nov 22 00:58:52 EST 2010 armv5tejl GNU/Linux

root@Storage:/# cat /etc/debian_version
5.0.2
root@Storage:/# cat /proc/cpuinfo
Processor : ARM926EJ-S rev 1 (v5l)
BogoMIPS : 1192.75
Features : swp half thumb fastmult edsp
CPU implementer : 0x56
CPU architecture: 5TE
CPU variant : 0x2
CPU part : 0x131
CPU revision : 1
Cache type : write-back
Cache clean : cp15 c7 ops
Cache lockdown : format C
Cache format : Harvard
I size : 16384
I assoc : 4
I line length : 32
I sets : 128
D size : 16384
D assoc : 4
D line length : 32
D sets : 128

Hardware : Feroceon-KW
Revision : 0000
Serial : 0000000000000000

root@Storage:/# local
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

Судя по всему нужно изменить кодировку. При установке freeNAS у меня получались везде корректные русские имена. Но так как познания в Linux у меня почти нулевые тут я бессилен. Прошу помощи.
Автор: urodliv
Дата сообщения: 22.11.2010 17:13
А в какой операционке они некорректно отображаются?
Автор: G_V_G
Дата сообщения: 22.11.2010 20:22
Я не знаю на чем работает мультимедийный плеер (ICONBIT HD370W), но при установке во freeNas кодовой страницы DOS - CP866 все имена отображаются корректно. Для кодовой страницы Unix ставил UTF-8. Как понимаю тут нужно сделать что то подобное, но не знаю как.
Автор: G_V_G
Дата сообщения: 23.11.2010 23:18
Продолжая ковырять появилась мысль, а может дело в настройке Samba?
Неужели никто не знает?
Автор: Alukardd
Дата сообщения: 24.11.2010 00:20
ну так установить locale дополнительно.
если там как вы нарыли debian lenny в той или иной степени, то попробуйте dpkg-reconfigure locales и выбираете там все что вам нужно.
Автор: G_V_G
Дата сообщения: 24.11.2010 09:54
2Alukardd
Пробовал, не выходит.
Вот что он мне выдает:

root@NAS:/# dpkg-reconfigure locales
Can't locate POSIX.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at /usr/share/perl5/Debconf/Template.pm line 7.
BEGIN failed--compilation aborted at /usr/share/perl5/Debconf/Template.pm line 7.
Compilation failed in require at /usr/share/perl5/Debconf/Question.pm line 8.
BEGIN failed--compilation aborted at /usr/share/perl5/Debconf/Question.pm line 8.
Compilation failed in require at /usr/share/perl5/Debconf/Config.pm line 7.
BEGIN failed--compilation aborted at /usr/share/perl5/Debconf/Config.pm line 7.
Compilation failed in require at /usr/share/perl5/Debconf/Log.pm line 10.
Compilation failed in require at /usr/share/perl5/Debconf/Db.pm line 7.
BEGIN failed--compilation aborted at /usr/share/perl5/Debconf/Db.pm line 7.
Compilation failed in require at /usr/sbin/dpkg-reconfigure line 9.
BEGIN failed--compilation aborted at /usr/sbin/dpkg-reconfigure line 9.

Что с этим делать?
Автор: vlary
Дата сообщения: 25.11.2010 11:19
G_V_G
Цитата:
Что с этим делать?
Установить в perl модуль POSIX.pm

Автор: G_V_G
Дата сообщения: 27.11.2010 00:35
2vlary
Ничего не выходит.

root@NAS:/# mv POSIX.pm /usr/share/perl5
mv: cannot create regular file `/usr/share/perl5/POSIX.pm': Read-only file system

Даже переместить файл не могу!
Автор: vlary
Дата сообщения: 03.12.2010 10:14
G_V_G Похоже, при некорректном шатдауне система перемонтировалась ридонли. Проверь командой mount, при необходимости перемонтируй с опцией remount
Автор: G_V_G
Дата сообщения: 03.12.2010 20:44
Мне кажется это не сбой, а специально сделанные ограничения.
Попробовал. Результат нулевой.

root@NAS:/# mount -o remount,rw /dev/loop0
mount: block device /dev/loop0 is write-protected, mounting read-only

root@NAS:/# mount -o remount,rw /dev/loop2
root@NAS:/#

Не изменилось ничего

root@NAS:/# mount
rootfs on / type rootfs (rw)
/dev/root.old on /initrd type ext2 (rw)
none on / type tmpfs (rw)
/dev/md0 on /boot type ext2 (rw,noatime)
/dev/loop0 on /mnt/apps type ext2 (ro)
/dev/loop1 on /etc type ext2 (rw,noatime)
/dev/loop2 on /oem type cramfs (ro)
proc on /proc type proc (rw)
none on /proc/bus/usb type usbfs (rw)
none on /proc/fs/nfsd type nfsd (rw)
none on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw)
tmpfs on /mnt/apps/lib/init/rw type tmpfs (rw,nosuid)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
/dev/mapper/md1_vg-md1vol1 on /mnt/soho_storage type xfs (rw,noatime,logbufs=8)

Может не так делаю?
Автор: Alukardd
Дата сообщения: 03.12.2010 21:04
G_V_G
ну измените файл /etc/fstab и перезагрузите девайс...
Автор: G_V_G
Дата сообщения: 04.12.2010 10:11
2Alukardd
Вот fstab:

# /etc/fstab: static file system information.
#
# <file system> <mount pt> <type> <options> <dump> <pass>
/dev/root / ext2 rw,noauto 0 1
proc /proc proc defaults 0 0
none /proc/bus/usb usbfs defaults 0 0
none /proc/fs/nfsd nfsd defaults 0 0
none /sys sysfs defaults 0 0
devpts /dev/pts devpts defaults,gid=5,mode=620 0 0

/boot/swapfile swap swap defaults 0 0

Что в нем нужно изменить?
Автор: ASE_DAG
Дата сообщения: 05.12.2010 03:46
G_V_G
Если верить выводу маунта, лупбэки к /usr отношения не имеют. Почему вы именно их решили перемонтировать?
Автор: G_V_G
Дата сообщения: 05.12.2010 12:56
2ASE_DAG
По совету старших товарищей))))
На самом деле я просто уже не знаю, что делать. Мне бы просто сделать русские имена файлов, а то жалко выброшенных денег.
Автор: G_V_G
Дата сообщения: 11.12.2010 23:19
В общем удалось мне добиться установки локалей.
В результате получил.

root@NAS:/# locale -a
C
POSIX
ru_RU
ru_RU.cp1251
ru_RU.iso88595
ru_RU.koi8r
ru_RU.utf8
russian

Но при просмотре файлов по сети русские имена продолжают отображаться абракадаброй или их вообще не видно. В зависимости от установок в smb.conf.

[Global]
server string= Iomega StorCenter Device
Workgroup= GVG-GROUP
security= user
domain master= yes
preferred master= yes
local master= yes
os level= 20
invalid users= bin daemon adm sync shutdown halt mail news uucp gopher
map to guest= Bad User
host msdfs= no
msdfs root= no
null passwords= yes
strict allocate= no
encrypt passwords= yes
printcap name= lpstat
printing= cups
printable= no
load printers= yes
max smbd processes= 500
getwd cache= yes
dos charset= cp866
unix charset= UTF-8
log level= 0
syslog= 0
max log size= 50
use sendfile= yes

Samba version 3.0.32

Есть у кого нибудь идеи как добиться нормальных имен?
Автор: gryu
Дата сообщения: 25.11.2014 11:32
Прошу прощения за подьём темы, но проблема как раз отсюда.

Имею такой же Iomega ix-2-200
Проблема та же.
в консоли по SSH нет русских имен.
Состояние NAS на момент начала топика, т.е. активные локали POSIX, в наботре локалей только она и en_us_utf8 Русской нет.
Прочитал топик.
К сожалению топик пастер так и не написал КАК он решил проблему
Цитата:
В общем удалось мне добиться установки локалей.
???



Добавлено:
P.S.
файловая система "рид онли" это штатно. Так оно и должно быть по идее производителя. Это не глюк.
В инете найдена инструкция по подключению в рекжиме RW "куска" системы на таком же NAS.

Код: Первая проблема с которой мы столкнемся, это то, что мы не имеем прав на изменение данных в папке /mnt/apps. Есть два решения:
1. Примонтировать копию apps в режиме записи. Это делается путем ввода следующих команд в терминале (каждый раз перед тем, как необходимо внести изменения):
# mknod -m0660 /dev/loop3 b 7 3
# chown root.disk /dev/loop3
# mkdir /tmp/apps
# mount -o loop /boot/images/apps /tmp/apps
Теперь у нас в папке /tmp/apps находится копия apps в которой мы можем менять все что угодно. После изменения данных необходимо отмонтировать папку:
# umount /tmp/apps
Автор: Alukardd
Дата сообщения: 25.11.2014 20:18
gryu
Эм, если в файле /etc/locale.gen имееются неоьбходимые локали. то нужно расскомментировать соответствующие строки и выполнить locale-gen
Посмотреть сгенерённые локали можно командой locale -a
Автор: gryu
Дата сообщения: 25.11.2014 22:20
Alukardd

Код: /# locale -a
C
POSIX
en_US.utf8
Автор: Alukardd
Дата сообщения: 26.11.2014 10:23
gryu
Что-то вы явно лишнего наменяли...
Вместо переписывания скрипта, попробуйте просто запустить так: locale-gen --keep-existing
Хотя ошибку создания временного файла это не решит.
Покажите вывод cat /proc/mounts

Что бы указать другой путь исправьте в 5-ой снижу строке $locale на /tmp/$locale. Хотя Вам это не сильно поможет, как их использовать-то потом?
Автор: gryu
Дата сообщения: 26.11.2014 11:03
Alukardd
Сижу "после вчерашнего" и лениво думаю.
А вот что интересно, сей скрипт поддерживает что либо типа ключа " --root-directory=****"
Под рукой Дебиана нет и NAS дома стоит. Проверить не могу.
Плюс вспомнилось что есть команда переназначения корня в системе. (забыл никогда не приходилось пользоватся и забыл...)
Кто помнит?
Идея то в этом случае проста.
Назначаем временно "/" как "/tmp/apps" и сборка должна пройти. Потом всё меняем обратно, отключаем /tmp/apps и ребутимся.

Добавлено:

Цитата:
исправьте в 5-ой снижу строке $locale на /tmp/$locale.

Пятая строка снизу "if"
Код: fi
localedef -i $input -c -f $charset -A /tmp/apps/usr/share/locale/locale.alias $locale || :; \
echo ' done'; \
done < $LOCALEGEN
echo "Generation complete."
Автор: Alukardd
Дата сообщения: 26.11.2014 11:40
gryu
Просто что бы они создались я и так сказал что поменять в скрипте.

А вообще, Ваше рассуждение натолкнуло меня на мысль, что можно воспользоваться каскадными ФС (aufs, overlayfs, ...). Если у Вас там ядро Debian, то оно должно быть пропатчено AUFS'ом.

Добавлено:
gryu
Я просто не решился кидать Вам в формате diff -u...
Код: @@ -58,7 +58,7 @@
     input=$USER_LOCALES/$input
fi
    fi
-    localedef -i $input -c -f $charset -A /usr/share/locale/locale.alias $locale || :; \
+    localedef -i $input -c -f $charset -A /usr/share/locale/locale.alias /tmp/$locale || :; \
    echo ' done'; \
done < $LOCALEGEN
echo "Generation complete."
Автор: gryu
Дата сообщения: 26.11.2014 11:47
Alukardd

Цитата:
А вообще, Ваше рассуждение натолкнуло меня на мысль, что можно воспользоваться каскадными ФС (aufs, overlayfs, ...). Если у Вас там ядро Debian, то оно должно быть пропатчено AUFS'ом.
Эмм.. А по русски?
Я с Ленукс недавно работать начал, а в Дебиан вообще ни разу не совался и особенностей незнаю.
Автор: Alukardd
Дата сообщения: 26.11.2014 12:17
gryu
По русски — нужно немного ОЗУ.
Код:
# в каталоге, где возможна запись созданиём пустую директорию
mkdir /tmp/overlay
# монтируем туда tmpfs
mount -t tmpfs aufs-tmpfs /tmp/overlay
# монтируем полученное добро поверх /
mount -t aufs -o dirs=/tmp/overlay:/=ro aufs /
Автор: gryu
Дата сообщения: 26.11.2014 13:03
Alukardd
во как... вечером попробую. Если дела не загрызут.
отпишусь.

Гм.

Код: /usr/sbin/locale-gen
Generating locales (this might take a while)...
en_US.ISO-8859-1...locale alias file `/usr/share/locale/locale.alias' not found: No such file or directory
done
...
Generation complete.
Автор: gryu
Дата сообщения: 26.11.2014 17:47
Добавлено:
[more]
    Первая проблема с которой мы столкнемся, это то, что мы не имеем прав на изменение данных в папке /mnt/apps.
    1. Примонтировать копию apps в режиме записи. Это делается путем ввода следующих команд в терминале (каждый раз перед тем, как необходимо внести изменения):
# mknod -m0660 /dev/loop3 b 7 3
# chown root.disk /dev/loop3
# mkdir /tmp/apps
# mount -o loop /boot/images/apps /tmp/apps

    Теперь у нас в папке /tmp/apps находится копия apps в которой мы можем менять все что угодно.
    После изменения данных необходимо отмонтировать папку ( umount /tmp/apps)


    Смотрим наличиствующие локали
# locale -a
C
POSIX
en_US.utf8

    Как видим русских нет.

    Правим /tmp/apps/etc/locale.gen для включения локелей.

# nano /tmp/apps/etc/locale.gen
    Снимаем с нужных знак комментариия #
# en_SG.UTF-8 UTF-8
# en_US ISO-8859-1
en_US.ISO-8859-15 ISO-8859-15
en_US.UTF-8 UTF-8
# en_ZA ISO-8859-1
...
# es_AR ISO-8859-1
...
# ro_RO.UTF-8 UTF-8
ru_RU ISO-8859-5
ru_RU.CP1251 CP1251
ru_RU.KOI8-R KOI8-R
ru_RU.UTF-8 UTF-8
# ru_UA KOI8-U
# ru_UA.UTF-8 UTF-8
# rw_RW UTF-8

    Сохраняем изменённый файл.
    Кто незнает nano Ctrl + x.
    Спросят "yes" или "no" Естествеенно соглашаемся.
    Спросят куда сохранить. По умолчанию в тот же файл по тому же пути. Просто жмём ввод соглашаясь

    Тепрь можно генерить локали, но при попытке получим ответ что file `/usr/share/locale/locale.alias' not found: No such file or directory
    Его действительно там нет. Копируем из /etc (там он почему то есть...)
# cp /etc/locale.alias /tmp/apps/usr/share/locale
    Переходим к генерации.
    Поскольку все переменые настроины на активную систему, то попытка просто запустить генерирование окончится ничем.
    Для решения этой проблемы временно переключаем активную точку монтирования системы с "/" на нашу подключённую копию в "/tmp/apps"
# chroot /tmp/apps
    Запускаем генерирование локалей.
# /usr/sbin/locale-gen
Generating locales (this might take a while)...
en_US.ISO-8859-1... done
en_US.ISO-8859-15... done
en_US.UTF-8... done
ru_RU.ISO-8859-5... done
ru_RU.CP1251... done
ru_RU.KOI8-R... done
ru_RU.UTF-8... done
Generation complete.

    Если ошибок нет, локали сгенерированы.
    Выходим из временного фокуса.
# exit

    Отмонтируем копию ситемы из tmp/apps
# umount /tmp/apps
    Перезагрузимся
# reboot

    Проверим локали.
/# locale -a
C
POSIX
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8
ru_RU
ru_RU.cp1251
ru_RU.iso88595
ru_RU.koi8r
    Ура!

[/more]

Однако дальше я что то опять туплю.
По прежнему
/# locale
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
И кириллицы в консоли нет

Создание и правка /etc/default/locale ничего не дала.
(и вообще.. его небыло, что странно)
Автор: Alukardd
Дата сообщения: 26.11.2014 22:30
gryu
НУ вообще файл /etc/default/locale должен работать...
Для проверки локали просто выполните в активном сеансе export LANG=ru_RU.UTF-8 и сообщения станут писаться на русском если могут.

Вообще если Вам надо просто что бы норм читались имена файлов на русском, или их содержимое, то того что сгенерированные локали есть в системе этого уже достаточно.
Автор: gryu
Дата сообщения: 27.11.2014 00:55
Alukardd

Цитата:
Вообще если Вам надо просто что бы норм читались имена файлов на русском, или их содержимое, то того что сгенерированные локали есть в системе этого уже достаточно.
Нужно. Но всёравно вопросительные знаки вместо кириллицы.
Цитата:
НУ вообще файл /etc/default/locale должен работать...
Как он в дебиане должен выглядеть?

Автор: Alukardd
Дата сообщения: 27.11.2014 05:08
gryu
У меня в нём одна строка, и большинства будет так же — LANG=en_US.UTF-8
Мой вывод locale -a
Цитата:
C
C.UTF-8
en_US.utf8
POSIX
ru_RU.cp1251
ru_RU.koi8r
ru_RU.utf8
russian
Автор: gryu
Дата сообщения: 27.11.2014 11:11
Alukardd
У меня во вновь созданном тоже одна, но LANG=ru_RU.UTF-8/
Кстати дайте ТОЧНУЮ цитату. Для сравнения. А то я встречал несколько вариантов ***UTF-8 и ***.UTF8

А ваш вывод locale что выдаёт?
# locale

У меня POSIX

Добавлено:

Цитата:
Но всёравно вопросительные знаки вместо кириллицы.
гм. А может это шрифты "свистят"? .. вот что я подумал.
Автор: L_S_V
Дата сообщения: 27.11.2014 12:25
если у вас дебиан(убунту), то должно сработать добавив в
/etc/default/locale

Код:
LC_CTYPE="ru_RU.UTF-8"

Страницы: 12

Предыдущая тема: FreeBSD + Xorg + hald + rus


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.