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

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

Программам нужна документация и чем программа больше — тем сильнее эта самая документация нужна. Для некоторых языков программирования существует возможность генерировать документацию на основе имеющихся комментариев при помощи специальных программ. В перле подобная возможность — создавать документацию из комментариев — тоже есть, но здесь не требуются какие-то сторонние программы — всё уже сразу есть. Речь идёт о 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]
...

Переключение окон в mc

Midnight Commаnder позволяет переключаться между панелями и окнами редатора и просмотра — в меню F9 → C̲ommand есть пункт Screen list̲ M-` — эта же клавиатурная команда работает и в редакторе mcedit (хотя в меню там нет такого пункта), и в просмотрщике (хотя там вообще нет меню). Сочетания клавиш LWin+` (точнее, Meta+`) и LAlt+` третий гном по умолчанию использует для переключения окнами одного приложения (хотя некоторые приложения поддерживают ещё и традиционное Ctrl+Tab), так что мне в терминале доступен лишь один способ ввести M-` — нажать и отпустить по очереди Esc и `

В командной строке эти клавиши не работают — для возврата к синим панелям оттуда есть традиционное сочетание Ctrl+O.

Старый хром

Браузер Google Chrome не желает обновляться на 32-битных системах, включая всякие линуксы:

Unsupported 32-bit Linux

застрял когда-то на версии 48, и всё. Всякие сайты ругаются, но Хром обновляться не желает.

About Google Chrome 48

Выход — использовать Chromium. Он спокойно продолжает обновляться и видит те дополнения, что были поставлены в Хроме.

About Chromium 61

Чтоб не тыкать вручную — автоматическое совмещение кадров в Hugin

Под виндой для склеивания панорам есть Kolor Autopano, под линуксом — Hugin. В принципе, Хугином вполне можно пользоваться: единственное, чего в нём не было по сравнению с Автопано — автоматического поиска серий кадров, но это не критично. С остальными задачами — аккуратно совместить кадры, внося необходимые геометрические искажения и поправляя цвет, дать пользователю выбрать тип проекции и сделать панораму в нужном размере — Хугин справляется. Однако с недавних пор в нём пропала возможность автоматически находить контрольные точки для совмещения кадров — приходится указывать их вручную. На панорамах из двух-трёх кадров это ещё терпимо, но если кадров десяток и панорам — не одна, это быстро утомляет.

Причина оказалась в том, что программу autopano-sift, которая использовалась для совмещения, из доступных в Ubuntu программ убрали, а альтернативу — autopano-sift-c — не добавили.

Способ решения — поставить что-нибудь из программ совмещения, с которыми Хугин умеет работать. Мне, как перлопрограммеру, ближе способ, который сводится к установке модуля Panotools::Script, и выбору Match-n-shift в настройках Хугина (File → Preferences → Control Point Detectors) в качестве программы по умолчанию. Попробовал — работает.

Аргазинское водохранилище

Аргазинское водохранилище

Аргазинское водохранилище

Река Миасс

Иконки в меню

Кто-то альтернативно одарённый, разрабатывая третий GNOME с третьим же GTK, решил, что иконки в меню не нужны. Во всяких простых приложениях вроде проводника^W файлового менеджера или калькулятора, где менюшки усохли, а то и вовсе пропали, может, и можно без них обойтись, но в программах с классическим GUI и развесистыми меню — никак: при переезде под третий гном стало заметно труднее ориентироваться. Меня, например, пестрота в меню раздражает куда меньше, чем невозможность быстро найти нужную команду.

Попутно выяснилось, что предлагаемый во многих местах рецепт не работает:

gsettings set org.gnome.desktop.interface menus-have-icons true
No such key 'menus-have-icons'

потому что параметр org.gnome.desktop.interface.menus-have-icons пропал — dconf-editor его не показывает.

Сработал другой вариант:

gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "{'Gtk/ButtonImages': &lt;1&gt;, 'Gtk/MenuImages': &lt;1&gt;}"

Результат — иконки вернулись на место. Попутно иконки и на кнопках появились — тоже иногда полезно.

Inkscape с иконками в меню

Перекодирование кривой кириллицы в именах зазипованных файлов

По старой ещё досовской привычке я до сих пор стараюсь избегать использования кириллицы в именах файлов. А другие люди — нет, не избегают. В итоге приходится сталкиваться с кривыми кодировками имён. Вот, например, так гномячий архиватор отображает ZIP-архив с кириллицей:

Неправильная кодировка кириллических имён файлов

Консольные инструменты — хоть unzip, хоть 7z — тоже не помогают.

Возможный способ решения — распаковать, а потом перекодировать имена:


convmv -f utf-8 -t latin1 --notest *
convmv -f cp866 -t utf-8  --notest *

При запуске без параметра --notest утилита convmv не переименовывает файлы, а только показывает, что должно получиться на выходе.

Compose не работает в musescore

Для того, чтоб изредка набрать буквы соседних языков (рәхим итәгеҙ!) достаточно настроить нужные последовательности для клавиши Compose и пользоваться ими. Но такой фокус не всегда удаётся: например, нотный редактор musescore (во всяком случае, в версии 2.0.2) как-то по-своему обрабатывает клавиатурные события и при нажатии клавиши Compose сразу же отображает ?!, воспринимая следующие клавиши как совершенно обычные. Поэтому при попытке ввести i десятеричное получается ?!ии. Получается, что в musescore нельзя ни дореволюціонные тексты вводить, ни украинские.

Самый простой выход в такой ситуации — поставить украинскую раскладку.

Забывчивый верстак

MySQL Workbench — графический клиент к популярной СУБД MySQL — штука хорошая. Я, пожалуй, поставил бы его на второе место среди известных мне клиентов, но в связи с тем, что самый с моей точки зрения лучший клиент — EMS Studio for MySQL — сейчас выпускается только под винду, приходится использовать всё-таки верстак воркбенч.

Среди нужных мне функций — сохранение паролей к базам данных и SSH-туннелям до них: достаточно ввести один раз, поставить галочку, что пароль должен быть сохранён, и всё — пароль сохранится в Gnome Keyring. Точнее, сохранялся в предыдущих версиях, а в 6.2 эта штука сломалась. Пишут, что в версиях 6.2.5 и 6.3.0 проблема устранена, но у меня установлена более древняя версия.

Проблема решается путём присваивания переменной окружения GNOME_KEYRING_CONTROL значения 1 — можно сделать это прямо в файле /usr/bin/mysql-workbench

#!/bin/bash

# Uncomment the following line if you're having trouble with gnome-keyring lockups.
# This will cause passwords to be stored only temporarily for the session.
#WB_NO_GNOME_KEYRING=1
export GNOME_KEYRING_CONTROL=1

/usr/bin/workbench

После этого MySQL Workbench пароли всё-таки запоминает.

Мелкими шажочками

Надоело, что под Убунту 12.04 LTS не всегда есть свежие версии софта даже в сторонних хранилищах — решил наконец-то обновить домашнюю систему прямо сейчас, не дожидаясь семнадцатого года.

Выяснил, что Убунту теперь предлагает обновляться не до следующей версии, а до ближайшей LTS-версии, что, конечно, в четыре раза лучше, чем было когда-то, но ещё в два раза медленнее, чем хотелось бы. Но делать нечего — обновляемся, как предлагают, в несколько этапов — 12.04 LTS (Precise Pangolin) → 14.04 LTS (Trusty Tahr) → 16.04 LTS (Xenial Xerus).

В ходе первого этапа у старого Гнома пропало меню, рамки окон и способность хоть что-нибудь запускать клавиатурными командами. Разбираться не стал — переключился на третий GNOME, чтоб можно было перейти к следующему этапу. Может, и останусь на третьем Гноме — на работе я уже на него перешёл.

Терминал

Быстрое переключение рабочих столов в третьем гноме

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

Когда вышел Gnome 3, в нём пропала возможность задать через графический интерфейс сочетания клавиш для переключения на конкретный стол — осталась лишь возможность переходить к соседним, что для меня не совсем удобно. Именно это и мешало переходить к третьему гному, вынуждая сидеть на втором либо на его форке MATE.

Однако, нашёлся способ — он описан на https://github.com/linuxmint/Cinnamon/issues/544 — можно нужные последовательности задать с помощью dconf-editor, настройки клавиатурных команд хранятся в org.gnome.desktop.wm.keybindings

dconf-editor

UPDATE∕20:00: оказывается, полтора года назад я на эти грабли уже наступал.