Ответы пользователя по тегу Linux
  • Как работать с китайским POS принтером из Java в linux?

    @klirichek
    Это линейный принтер (lp). Он может просто печатать напрямую текст, который в него отправляют (т.е. просто открываете нужный порт и шлёте в него байтики).
    С помощью escape-последовательностей можно переключать принтер в графический режим и управлять дополнительными фичами, специфическими для POS (например, открывать крышку кассы. Или автоматически печатать штрих-код).
    Т.е. в простейшем случае - переводите принтер в нужную кодовую страницу с помощью esc-последовательности и потом просто шлёте в него текст в нужной кодировке.

    Если воспользоваться драйвером, то все возможности принтера сводятся к графической печати (это растровый фильтр CUPS. И, кстати @ntkt не совсем прав насчёт поддержки PostScript. PPD файлы в cups это своя собственная сущность, так у них принято описывать вообще все принтеры.) Тогда у вас появляется "стандартный" принтер с форматом бумаги шириной 58 мм. Весь рендеринг в растр берёт на себя CUPS, а фильтр лишь парсит настройки печати и затем добавляет нужные escape-последоватльности для вывода растра.

    К слову, фильтр, похоже, был написан индусами :)
    Настройки в PPD не показывает, а сам вылетает. Да и к тому же предоставлен только в виде 32-битного бинаря. Я провозился с ним пару дней, пытаясь настроить. В итоге психанул и написал свой фильтр. Он работает.

    https://github.com/klirichek/zj-58
    Ответ написан
  • Как получить список физических жёстких дисков в системе и места их монтирования?

    @klirichek
    Запуск strace lsbkl говорит, что последний читает /sys/block и как-то интерпретирует прочитанное.
    Может вам так же попробовать, напрямую?
    Ну или исходники его посмотреть, в конце концов.
    Ответ написан
  • Как настроить физический размер монитора в Ubuntu?

    @klirichek Автор вопроса
    В общем, практически получилось. За исключением одного момента, но о нём позже.

    Лезть в глобальные настройки xorg я не стал.
    Утверждение о неучёте DPI тоже оказалось не совсем верным.

    Шаг номер раз: смотрим, как оно сейчас.
    alexey@vubuntu:~$ xrandr
    Screen 0: minimum 320 x 200, current 2880 x 1024, maximum 8192 x 8192
    LVDS1 connected 1600x900+0+124 (normal left inverted right x axis y axis) 309mm x 174mm
       1600x900       60.0*+   40.0  
       1440x900       59.9  
       1360x768       59.8     60.0  
       1152x864       60.0  
       1024x768       60.0  
       800x600        60.3     56.2  
       640x480        59.9  
    VGA1 disconnected (normal left inverted right x axis y axis)
    HDMI1 connected 1280x1024+1600+0 (normal left inverted right x axis y axis) 338mm x 270mm
       1280x1024      60.0*+   75.0  
       1152x864       75.0  
       1024x768       75.1     70.1     60.0  
       832x624        74.6  
       800x600        72.2     75.0     60.3     56.2  
       640x480        72.8     75.0     66.7     60.0  
       720x400        70.1  
    DP1 disconnected (normal left inverted right x axis y axis)
    HDMI2 disconnected (normal left inverted right x axis y axis)
    HDMI3 disconnected (normal left inverted right x axis y axis)
    DP2 disconnected (normal left inverted right x axis y axis)
    DP3 disconnected (normal left inverted right x axis y axis)


    — сразу видно и разрешение, и физические размеры мониторов.
    Что мешает системе учесть физические размеры сразу? Неизвестно. Но факт в том, что они есть, и они верные.

    Шаг номер два. Вычисляем коэффициент масштабирования (ну, привык я пятоном пользоваться, как калькулятором):

    alexey@vubuntu:~$ python
    Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 900/174.0
    5.172413793103448
    >>> 1024/270.0
    3.7925925925925927
    >>> 5.1724/3.79259
    1.3638173385470087
    >>>
    


    Шаг номер три: применяем полученный коэффициент и смотрим, что в итоге получилось:
    alexey@vubuntu:~$ xrandr --output HDMI1 --scale 1.3638x1.3638
    alexey@vubuntu:~$ xrandr
    Screen 0: minimum 320 x 200, current 3346 x 1397, maximum 8192 x 8192
    LVDS1 connected 1600x900+0+124 (normal left inverted right x axis y axis) 309mm x 174mm
       1600x900       60.0*+   40.0  
       1440x900       59.9  
       1360x768       59.8     60.0  
       1152x864       60.0  
       1024x768       60.0  
       800x600        60.3     56.2  
       640x480        59.9  
    VGA1 disconnected (normal left inverted right x axis y axis)
    HDMI1 connected 1746x1397+1600+0 (normal left inverted right x axis y axis) 338mm x 270mm
       1280x1024      60.0*+   75.0  
       1152x864       75.0  
       1024x768       75.1     70.1     60.0  
       832x624        74.6  
       800x600        72.2     75.0     60.3     56.2  
       640x480        72.8     75.0     66.7     60.0  
       720x400        70.1  
    DP1 disconnected (normal left inverted right x axis y axis)
    HDMI2 disconnected (normal left inverted right x axis y axis)
    HDMI3 disconnected (normal left inverted right x axis y axis)
    DP2 disconnected (normal left inverted right x axis y axis)
    DP3 disconnected (normal left inverted right x axis y axis)
    


    Это уже похоже на правду!
    Остался один момент: мониторы выровнены по нижнему краю. В начальном варианте это означало, что левый смещён на (1024-900)-124 пикселя по вертикали. Теперь «большой» стал имитировать вертикальное разрешение уже 1397; стал быть смещение нужно задать в 497 пикселей:

    alexey@vubuntu:~$ xrandr --output LVDS1 --pos 0x497


    Получилось вот так:
    image

    Но один момент остался — это координаты мыши. Она по-прежнему думает, что имеет дело с 1280х1024 — и поэтому на отмасштабированном мониторе при перемещении вниз/вправо в конце концов упирается в эту невидимую границу. На картинке на большом мониторе мышь видно в её самой нижней-правой возможной позиции (т.е. там её нельзя сдвинуть ни ниже, ни правее).

    Если кто подскажет, как побороть и этот момент тоже — буду премного благодарен!
    Ответ написан