Архив рубрики: linux

Синхронизация часов в десятом Дебиане

В свежем Debian GNU/Linux (вроде, и в Ubuntu 16.04 LTS четырёхлетней давности аналогично) для синхронизации часов используют не ntp, а timesyncd. Только оно по умолчанию не работает — ни на рабочем компьютере, ни на домашнем ноутбуке.

Начал разбираться — выяснил:

  1. Настройки хранятся в /etc/systemd/timesyncd.conf: там есть адрес основного сервера для синхронизации и список запасных — и оба этих списка закомментированы. Понятно, что надо раскомментировать плюс можно в качестве основного адреса указать тайм-сервер своего провайдера.
  2. VirtualBox препятствует синхронизации — его можно запустить (sudo VBoxService --timesync-set-start — мне не помогло) или совсем проигнорировать, если используется редко, как я и сделал.

После этого останется лишь перезапустить демонов и время наконец-то станет точным.

Скачивание видеороликов с попутным их склеиванием

Если что-то в интернете можно посмотреть, значит, это можно и скачать, хоть это и не всегда удобно.

Вот, например, челябинский провайдер «Интерсвязь» всюду развесил камеры видеонаблюдения да видеодомофоны и даёт возможность своим абонентам смотреть не только то, что происходит прямо сейчас, но и архив за последнюю неделю. При этом архивную запись с общедоступной камеры скачать можно — на странице есть соответствующая кнопка, но вот с камеры домофона — нельзя.

Как известно, если нельзя, но очень хочется, то можно.

Метод

1. Заходим на страницу с архивом, находим нужный фрагмент, открываем отладчик (клавишей F12), переключаемся на вкладку Network — так и в Google Chrome, и в Mozilla Firefox.

2. Запускаем воспроизведение — отладчик покажет выполненные запросы.

3. Когда запросы перестанут идти (то есть, всё нужно, уже скачалось), можно, щёлкнув по ним правой кнопкой, выбрать пункт “Save all as HAR” — запросы и ответы на них будут сохранены единым файлом с расширением HAR — на самом деле это JSON.

В отладчике открыта вкладка Network

4. Берём какой-нибудь HAR-extractor (есть всякие варианты — мне подошёл первый попавшийся, написанный на Node.JS), натравливаем его на HAR-файл, получаем папку, в одной из подпапок которой будут лежать видеофайлы с расширением TS.

5. Смотрим эти видеофайлы — под линуксом с гномом можно использовать стандартный видеоплеер totem или всеядный mpv (ну или mplayer, из которого он и вырос).

6. Создаём текстовый файл, каждая строка которого состоит из слова file, пробела и имени файла в апострофах:

file 'cam42_16-10-2020_26778689266.ts'
file 'cam42_16-10-2020_26778699914.ts'

7. Склеиваем мелкие видеофрагменты в один большой файл:

ffmpeg -f concat -i список.txt -codec copy результат.mp4

Всё!


Аналогичный способ — сохранение кучи мелких файликов через HAR — можно использовать для того, чтоб добыть тайлы — небольшие квадратные картинки из которых состоят интерактивные карты на сайтах, а потом, делая свою карту, разместить эти тайлы где-нибудь у себя, чтоб не создавать лишнюю нагрузку на тайлопровайдера — они этого не любят: OpenStreetMap просит не брать тайлы непосредственно у них, а фонд ВикиМедиа всё время клянчит денег на поддержку функционирования Википедии. Реальный пример такого подхода — карта Global SUSU на сайте Южно-Уральского университета: тайлы там сгенерированы Википедией из общедоступных данных OpenStreetMap, но хранятся на одном из университетских серверов.

Аська выступает

ICQ (точнее, Mail.ru Group), похоже, хочет заставить пользователей переползти на использование нового клиента. Мне кажется, эффект будет обратным — народ разбежится.

Вот я, например, не собираюсь ни с отдельным клиентом возиться (мне универсального Пиджина хватает), ни держать аську в браузере — и без неё десятки вкладок иногда открыты. Так что если с нового года моя ромашка покраснеет — значит, пишите письма. Почта куда надёжнее аськи.

Разрешаем Имиджмеджику делать PDF

ImageMagick позволяет собирать многостраничный PDF-файл из нескольких растровых картинок, но не всегда — на некоторых компьютерах выдаёт ошибку

convert: not authorized `result.pdf' @ error/constitute.c/WriteImage/1028.

Причина — в том, что в конкретном экземпляре может быть запрещено создавать PDF, но есть рецепт, как это исправить: в файле /etc/ImageMagick-6/policy.xml надо включить нужное разрешение — строку

<policy domain="coder" rights="none" pattern="PDF" />

надо заменить на 

<policy domain="coder" rights="read|write" pattern="PDF" />

После этого PDF-файл будет нормально создаваться.

Теперь осталось понять, почему же готовый файл вдвое тяжелее суммы исходных. Добавление в команду преобразования параметров -dither none -colors 2 на размер готового файла практически не влияет.

Иконки в пятом либреофисе

Пятой версией пакета LibreOffice, когда она запущена в девятом дебиане, где по умолчанию стоит третий Гном и тема оформления Adwaita, пользоваться неудобно — в меню без иконок легко запутаться, а прошлогодний рецепт по их возвращению не помогает. Оказалось, у советских — собственная гордость^W^W^W^W в LibreOffice применяются свои собственные настройки — T̲ools → O̲ptions (Alt+F12)

Настройки LibreOffice

По умолчанию установлено автоматическое отображение либо скрытие иконок и в моём случае это всё-таки скрытие. Если их включить — менюшки станут удобнее — и основное меню поменяется, и контекстные.

Меню

Офисные меню выглядят не очень хорошо — вместо отсутствующих иконок надо было бы показать пустоту и сдвинуть текст, но даже в таком виде лучше, чем совсем без иконок.

Регистрозависимая сортировка

Линуксовая команда sort (во всяком случае, в Ubuntu 16.04 LTS) почему-то сразу сортирует без учёта регистра, хотя такое поведение должно включаться специальным ключом -f либо --ignore-case. Ключа --no-ignore-case для выключения такого поведения нет. Выход — сортировать перловым однострочником


perl -0777 -ne 'print join "\n", sort split "\n"'

Выделение ресурсов на преобразование картинок

ImageMagick иногда падает, ругаясь на исчерпание ресурсов:

convert-im6.q16: DistributedPixelCache ‘127.0.0.1’ @ error/distribute-cache.c/ConnectPixelCacheServer/244.
convert-im6.q16: cache resources exhausted `/tmp/magick-7601a0NxF7K2WOIO4′ @ error/cache.c/OpenPixelCache/3945.

несмотря на то, что на компьютере хватает и оперативной памяти, и места на диске. Решение нашлось в одном из комментариев к описанию этой проблемы: надо изменить объём доступной имиджмеджику памяти — он указывается в файле /etc/ImageMagick-6/policy.xml

Фрагмент файла policy.xml из настроек ImageMagick

Я увеличил указанные там величины вдвое — не помогло, увеличил ещё вдвое — хватило.

Разноцветный полуночный командир

Популярный в юниксоподобных операционных системах файловый менеджер Midnight Commander можно перекрасить — вдруг кому-то синий цвет не нравится? Я когда-то mc перекрашивал для того, чтоб не путаться в серверах. Каждому серверу — свою раскраску. Делалось это, например, так:

MC_COLOR_TABLE=normal=black,cyan:selected=white,brown:marked=yellow,cyan:markselect=yellow,brown:menu=brightcyan,brown:menusel=black,white:menuhot=yellow,brown:menuhotsel=yellow,white:executable=brightgreen,cyan:directory=white,cyan:link=blue,cyan:stalelink=brightred,cyan:device=magenta,cyan:special=brightblue,cyan:core=red,cyan:editnormal=black,cyan:editbold=brightcyan,green:editmarked=white,brown
export MC_COLOR_TABLE
mc

Прошли годы, сейчас стало всё гораздо проще: через меню теперь можно выбрать нужный внешний вид: F9 → Options → Appearance — и можно выбирать из двадцати восьми вариантов

Меню в Midnight Commander

А можно перекрасить во что-нибудь своё: для этого надо взять ini-файл из /usr/share/mc/skins, скопировать к себе, перекрасить, а потом подсунуть его миднайт командеру:

mc -S path/to/file.ini

Если терминал способен показывать 256 цветов, то можно и mc научить их показывать, указывая их по номеру: от color16 до color231 — эти 216 цветов совпадают с безопасной веб-палитрой (кто-то помнит ещё про такую?), то есть по 6 градаций яркости на каждый компонент — красный, синий и зелёный. Чтоб не рыться в таблицах с кодами цветов, можно указывать цвет синонимами — от rgb000 до rgb555. Оттенков серого побольше — их двадцать четыре, от чёрного gray0 до белого gray23, причём чёрный gray0 в отличие от обычного black не становится серым при добавлении к нему жирности. Результат может быть, например, таким:

Сине-зелёный mc с серым меню

Подробно о раскрашивании mc в 256 цветов написано в комментариях в файле /usr/share/mc/skins/sand256.ini, а судя по тому, что лежит на гитхабе, кое-кто, раскрашивая mc, указывает цвета, выбирая из 16 миллионов — уже существуют TrueColor-скины. И это хорошо 🙂

Как засунуть имиджмеджиком растровые картинки в PDF нужного размера

Для несложных преобразований картинок: изменение размера, увеличение резкости, добавление надписей и преобразование типов — большой и тяжёлый графический редактор не нужен — достаточно взять ImageMagick. ImageMagick знает не только кучу разных растровых форматов файлов, но и кое-какие векторные, в том числе PDF, однако преобразование в них требует иногда плясок с бубном: например, если для преобразования толпы PNG-файлов написать

convert *png result.pdf

то результат может и не понравиться. Путём экспериментов с найденным на всяких форумах кодом получился такой рецепт для преобразования в PDF размером 210×297 мм (A4) кучи растровых файлов, отсканированных с разрешением 600 точек на дюйм

convert *png -units pixelsperinch -density 600 -resize 100% \
 -gravity center -background white -extent 4960x7016 result.pdf

размер растровых файлов не меняется, они располагаются в центре получившихся страниц.

PDF-файл с разным заполнением страниц

Для картинок с разрешением 300 dpi цифры будут чуть другими:

convert *png -units pixelsperinch -density 300 -resize 100% \
-gravity center -background white -extent 2480x3508 result.pdf

Для 150 dpi числа надо ещё вдвое уменьшить:

convert *png -units pixelsperinch -density 150 -resize 100% \
-gravity center -background white -extent 1240x1754 result.pdf

Нужен перлдок

Программам нужна документация и чем программа больше — тем сильнее эта самая документация нужна. Для некоторых языков программирования существует возможность генерировать документацию на основе имеющихся комментариев при помощи специальных программ. В перле подобная возможность — создавать документацию из комментариев — тоже есть, но здесь не требуются какие-то сторонние программы — всё уже сразу есть. Речь идёт о POD — Plain Old Documentation format — языке разметки для документирования перла, перловых программ и перловых модулей — текст, размеченный с его помощью, можно сразу в скрипты вставлять. Подробнее написано в man perlpod.

Можно сделать и так, чтоб консольное перловое приложение выводило документацию о себе, если запущено с определёнными аргументами, например, -?, -h или --help вызывало бы вывод краткой информации, а -m, --man или --manual — полной. Делается это так:

#!/usr/bin/perl

=head1 SYNOPSIS

./script-name.pl I<[options]>

=head1 OPTIONS

... ещё документация

=cut

use Getopt::Long;
use Pod::Usage qw( pod2usage );

my $need_help;
my $need_manual;

GetOptions(
    # обработка других аргументов
    'help|?'            => \$need_help,
    'manual'            => \$need_manual,
);

pod2usage(1)
    if $need_help;
pod2usage('verbose' => 2)
    if $need_manual;

Запускаем с аргументом -? — видим краткую справку, пробуем -m — видим что попало: где-то видна документация, а где-то — исходный код. Если после выхода из просмотра этого кода внимательнее посмотреть на экран, можно заметить сообщение

You need to install the perl-doc package to use this program.

Причина — отсутствие перлдока. В некоторых системах, например, во FreeBSD, perldoc сразу установлен, в других, таких как Debian — нет, и его надо ставить отдельно. Если поставить perldoc, то и скрипты начинают нормально выводить свою документацию:


$ perldoc ./script-name.pl
You need to install the perl-doc package to use this program.
$ sudo apt install perl-doc
...
$ ./script-name.pl --man
SYNOPSIS
./script-name.pl [options]
...