Про cups и русский текст
Feb. 2nd, 2009 10:39 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Поставил таки дома cups. Решил разобраться, а как этим cups-ом (1.3.8-1lenny4.1) plain-текст то печатать. Да, я знаю, современный лемминг, на которого этот cups рассчитан, plain-текст не печатает, он для того чтобы список покупок в магазине напечатать, OpenOffice запускает.
А я вот, нехороший человек люблю ls|lp и тому подобное делать. И вообще основной редактор у меня vim.
Выяснилось следующее:
1. texttops из cups умеет плюс-минус корректно генерировать Postscript из русского utf-8.
Он правильно энкодит буковки, и даже кладет туда шрифт из /usr/share/cups/fonts/Courier.
2. Кодировок, отличных от utf-8 он не умеет. Совсем. Разучился. При явном запуске texttops с CHARSET=koi8-r оно ругается что нет такого файла /usr/share/cups/charsets/koi8-r. А поскольку lp, запущенный в локали ru_RU.KOI8-R что-то да печатает, а ls |iconv -t utf-8| lp печатает то, что надо, lp НЕ ПЕРЕДАЕТ фильтру charset.
3. Шрифт, который у них называется Courier, это на самом деле слегка подхаканный Urw Nimbus Mono версии 1.05, в котором русских букв нет.
4. Если взять Urw Nimbus Mono 1.06 из пакета t1-cyrillic, сконвертировать его в pfa-формат, и слегка подредактировать заголовки, чтобы он считал себя Courier-ом, а не Nimbus-ом, русские буквы на бумаге даже вполне появляются.
5. В /usr/share/cups/charsets/utf-8 утверждается, что для диапазона 0x0400-0x04ff надо использовать Courier, Courier-Bold etc. Хотя см. п. 3.
Bug #513956
И еще. Прописал я тут Location и Description купсовским принтерам через web-интерфейс русскими буквами. Результат - офигительный. В Gtk-шных диалогах все показывается как надо, независимо от локали, в которой запущено приложение. В OpenOffice.org, запущенном в локали UTF-8 - все в порядке. Но если запустить OO.o в какой другой локали, мы увидим... Ну сами понимаете что мы увидим, если программа покажет utf-8 строку, думая что она koi8-r или cp1251.
А я вот, нехороший человек люблю ls|lp и тому подобное делать. И вообще основной редактор у меня vim.
Выяснилось следующее:
1. texttops из cups умеет плюс-минус корректно генерировать Postscript из русского utf-8.
Он правильно энкодит буковки, и даже кладет туда шрифт из /usr/share/cups/fonts/Courier.
2. Кодировок, отличных от utf-8 он не умеет. Совсем. Разучился. При явном запуске texttops с CHARSET=koi8-r оно ругается что нет такого файла /usr/share/cups/charsets/koi8-r. А поскольку lp, запущенный в локали ru_RU.KOI8-R что-то да печатает, а ls |iconv -t utf-8| lp печатает то, что надо, lp НЕ ПЕРЕДАЕТ фильтру charset.
3. Шрифт, который у них называется Courier, это на самом деле слегка подхаканный Urw Nimbus Mono версии 1.05, в котором русских букв нет.
4. Если взять Urw Nimbus Mono 1.06 из пакета t1-cyrillic, сконвертировать его в pfa-формат, и слегка подредактировать заголовки, чтобы он считал себя Courier-ом, а не Nimbus-ом, русские буквы на бумаге даже вполне появляются.
5. В /usr/share/cups/charsets/utf-8 утверждается, что для диапазона 0x0400-0x04ff надо использовать Courier, Courier-Bold etc. Хотя см. п. 3.
Bug #513956
И еще. Прописал я тут Location и Description купсовским принтерам через web-интерфейс русскими буквами. Результат - офигительный. В Gtk-шных диалогах все показывается как надо, независимо от локали, в которой запущено приложение. В OpenOffice.org, запущенном в локали UTF-8 - все в порядке. Но если запустить OO.o в какой другой локали, мы увидим... Ну сами понимаете что мы увидим, если программа покажет utf-8 строку, думая что она koi8-r или cp1251.
no subject
Date: 2009-02-02 08:12 pm (UTC)я когда-то программы на foxpro 2.6 из dosemu на матричник заставлял печатать, там как раз надо было без проебразований.
А в остальных случаях -- тоже через iconv
no subject
Date: 2009-02-02 08:14 pm (UTC)no subject
Date: 2009-02-02 08:39 pm (UTC)no subject
Date: 2009-02-02 08:31 pm (UTC)а уже .ps шел на CUPS и в принтера
no subject
Date: 2009-02-02 08:38 pm (UTC)no subject
Date: 2009-02-02 09:15 pm (UTC)чтото других шрифтов подходящих не нашлось
no subject
Date: 2009-02-02 09:59 pm (UTC)no subject
Date: 2009-02-02 10:11 pm (UTC)no subject
Date: 2009-02-03 07:16 am (UTC)К тому же с utf-8 он совсем работать не умеет.
no subject
Date: 2009-02-03 03:40 pm (UTC)utf-8 я не пользуюсь.
no subject
Date: 2009-02-02 10:43 pm (UTC)no subject
Date: 2009-02-03 07:15 am (UTC)no subject
Date: 2009-02-03 11:10 am (UTC)Потому что для меня основное конкурентное преимущество CUPS перед LPD было ровно в том, что в LPD'шный фильтр передать текущую кодировку было невозможно, и поэтому невозможно было печатать текст командой lpr. А в купсовский - возможно, и поэтому печатать текст, который я вижу, можно было просто командой lp.
no subject
Date: 2009-02-03 12:25 pm (UTC)Еще надо подумать, не логичнее ли производить перекодировку из текущей локали в utf-8 на уровне клиента, а не фильтров.
no subject
Date: 2009-02-03 01:17 pm (UTC)Так на клиенте нет разницы, в utf-8 или сразу в PostScript...
no subject
Date: 2009-02-03 01:40 pm (UTC)no subject
Date: 2009-02-03 03:11 pm (UTC)Именно. Поэтому возможность посмотреть, что получилось, до того, как оно потратило пол-пачки бумаги, часто полезна. Если уж нету готового средства "попросил напечатать - и оно печатает", если все равно что-то настраивать, то лучше настраивать сразу преобразование в PostScript. И лучше - не купсовским texttops... Может, он и крут безмерно на предмет UTF-8, но вот когда мне попадется UTF-8, который невозможно перекодировать в то, что понимает a2ps (и при этом texttops его реально может - а то что-то я подозреваю, что вовсе не так он крут, и об деванагари обломается на раз...), тогда я этим ублюдечком и воспользуюсь. Пока ни разу не попался.
no subject
Date: 2009-02-11 10:27 pm (UTC)no subject
Date: 2009-02-12 08:52 am (UTC)Командно-строчная утилита, которая зависит от libX11 - это отказать сразу.
Её на print-server ставить, какая там X11?
no subject
Date: 2009-02-12 09:04 am (UTC)ldd /usr/bin/paps
linux-gate.so.1 => (0xffffe000)
libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0xb7ef8000)
libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0xb7eb7000)
libm.so.6 => /lib/libm.so.6 (0xb7e91000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb7e66000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb7de5000)
libz.so.1 => /lib/libz.so.1 (0xb7dd2000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb7db0000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb7d71000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0xb7d6c000)
libdl.so.2 => /lib/libdl.so.2 (0xb7d68000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb7c97000)
libc.so.6 => /lib/libc.so.6 (0xb7b5d000)
/lib/ld-linux.so.2 (0xb7f50000)