Hatred's Log Place

DON'T PANIC!

utf8_lokal_v_archlinux

Jun 4, 2007 - 5 minute read

UTF8 локаль в ArchLinux

Дизель выложил в свое время замечательную ссылочку на форуме по поднятию UTF8 локали в Arch Linux http://vl-lug.ru/forum/viewtopic.php?id=105

hint: ныне не активном, потому саму статью смотреть тут

Здесь я хочу что бы все желающие выдавали свои дополнения, оформенные ввиде статьи.

И так, положим начало…

Имена файлов

На старой koi8-r системе было довольно приличное количество файлов в русскими именами, естественно в кодировке koi8-r. Что делать, в UTF локали с такими именами файлов работать несподручно…

на решение пробелемы навел запуск такой команды:

LANG=ru_RU.KOI8-R ls | iconv -f koi8-r

Эта команда вывела список имен файлов с русскими именами как и положено, русскими буковками. Так родился скрипт:

#!/bin/bash

#
# Recode all file names in given codepage to UTF8
# on UTF8 system
#

CODE_FROM="KOI8-R"
recursive=0
scan_only=0

function parse_cmd_line()
{
    prev_arg=""
    need_next=0
    for i in "$@"
    do
	if [ $need_next -eq 0 ]; then
	    case $i in
	    "-f")
		prev_arg="-f"
    		need_next=1
	    ;;
	    "-r")
		recursive=1
	    ;;
	    "-s")
		scan_only=1
	    ;;
	    esac
	else
	    case $prev_arg in
	    "-f")
		CODE_FROM=`echo $i | tr '[:lower:]' '[:upper:]'`
	    ;;
	    esac
	    prev_arg=""
	    need_next=0
	fi
    done
}

function recode_file()
{

    old_name="$@"
    new_name=`echo $@ | iconv -f $CODE_FROM`
    stat1=$?
    mid_name=`echo $@ | iconv -f UTF8 2>/dev/null`
    stat2=$?

    if [ x"$old_name" != x"$new_name" -a $stat1 -eq 0 -a x"$mid_name" != x"$old_name" ]; then
	if [ $scan_only -eq 0 ]; then
	    echo "Recode: $old_name -> $new_name"
	    mv "$old_name" "$new_name"
	else
	    echo `pwd`"$@"
	fi
    fi
}

parse_cmd_line $@

oldIFS=$IFS
IFS=$'n'
files=`ls -1 --color=none`
for i in $files
do
    if [ -d "$i" ]; then
	if [ $recursive -eq 1 ]; then
	    name=`basename $0`
	    if [ `dirname $0` == "." ]; then
		prefix=`pwd`
	    else
		prefix=`dirname $0`
	    fi
	    cd "$i"

	    $prefix/$name "$@"
	    
	    cd ..
	fi
    fi

    recode_file "$i"
done

запускам сей скрипт из директории содержимое которой нужно привести к виду UTF8:

recodedir

Скрипт понимает ключи:

  • -r говорит что перебрать все каталоги рекурсивно, начиная с текущего
  • -s просканирует каталоги и выдаст список файлов которые нужно изменять
  • -f <кодировка> задает кодировку из которой перекодировать, по умолчанию KOI8-R

Midnight Commander

Есть два вариант, mc-utf8 из репозитария community либо вот этот образец: http://pupykins.googlepages.com/mc.html

Автор mc-cru и автор порта в community - суть один человек, имя ему Сергей Пупыкин (надеюсь правильно написал фамилию) в том виде в котором идет mc-cru очень нелицеприятный. Что бы привести его в чувство, смержил utf8 патч с той версии что в репозитарии, плюс сделал пееркодировку в редакторе (но тут кроется бага… страшаная, которую пока лень решать, при перекодировке в редакторе не работает поиск и замена).

И так, по этой ссылке можно скачать правило для сборки для makepkg и патч:

На данный момент крайне рекоменду использовать mc-utf8 из комплекта репозитария community - слишком много багов в редактрое нашел, так что пользоваться почти нереально. А вот исправлять как-то очень лениво

Музыка, MP3

Да… Чем мне нравиться формат ogg vorbis так это тем что там стандартом закреплено использование utf для тагов, в случае mp3 - это не так, и, по большей части, теги там 8ми битные, либо cp1251 (чаще всего) или какой другой (в моем случае - koi8-r).

Так вот, многие, думаю, использую для прослушивание музыки старый добрый xmms, только вот что бы там нормально смотреть теги нужно патчить и еще раз патчить, что не есть удобно, да и со стабильностью потом большие проблемы - шаг влево, шаг вправо - sig fault (может это и мои кривые руки, но, если это так, это уже мои интимные подробности). Короче, для решения данной проблемы рекомендую заюзать BMP (Beep Media Player), который является суть переписью на GTK2 xmms’а.

Сий проигрыватель идет в репозитариях Arch и потому я сделал следующие команды:

[root]# pacman -R xmms
[root]# pacman -S bmp

Для себя можете еще поставить разные плагины для него (hint: pacman -Sl | grep bmp)

Далее идем в Настройки -> Модули -> Медиа -> Выделяем ‘Модуль поддержки MPEG’ и нажимаем Параметры -> Идем на вкладку ‘Название’ Тут включаем опцию ‘Преобразовывать ID3-теги из локальной кодировки в уникод’ и поле ‘Кодировка ID3-тегов’ указать кодировку в которой идут собственно эти теги (название кодировки должно быть понятно iconv’у, наберите iconv -l и посмотрите там, если сомневаетесь). Собственно все. Могу сказать только одно - редактировать теги вы все равно не сможете в локальной кодировке, имхо, недоделка, но жить можно. Несколько плагинов для bmp можно найти тут: http://svn.pld-linux.org/cgi-bin/viewsvn/bmp-plugins/trunk а забрать так:

svn co http://svn.pld-linux.org/svn/bmp-plugins/trunk

Есть еще проигрыватель bmpx - продолжение bmp, но еще зовется beep-media-player2, но игрушка еще довольно сырая, к сожалению, и с перекодировкой тегов траблы, хотя этим, вроде, в нем занимается gstreamer, так что туда, наверное, копать нужно. Да и грузится оне непозволительно долго для проигрывателя.

Для редактирования тегов в любых кодировках, используйте прогу easytag, там и перекодировать все можно, если нужно.

Если есть что дополнить по другим проигрывателям, особенно консольным или тем что в комплекте различных DeskTop Env, плиз, отпишите тут.

Так, вот мой последний апдейт по проигывателям и проблемами русской кодировки - Audacious - проигрыватель, который в свою очередь является форком BMP (еще цепочку не потеряли, кто от кого форкнулся? :)), форк от последней существующей версии BMP - 0.9.7.1 (BMP больше не развивается, а вот Audacious довольно динамично идет), так что содержит и всю функциональность которая присутствует в оригинальном BMP плюс некоторые импрувменты, в частности поддержки кодировок тегов. Очень советую поставить и попробывать, тем более что он есть в extra репозитарии ArchLinux. Из минусов могу отметить только медленную загрузку листов - скорее всего он детектит файлы по содержимому, но как это отключить я не нашел. Поддрежка перекодировки тегов сделана везде, в отличии от BMP. Короче, поставте и посмотрите, лично мой выбор - Audacious

nebolshoe_oblegchenie_zhizni_s_infrakrasnikom_tekram_410w

comments powered by Disqus