Автоматизизация терминала в Linux
В Линукс существует мега полезная утилита screen. При помощи нее можно создавать виртуальные терминалы в терминале которые будут выполняться фоном так, что можно не бояться что соединение прервется и вы потеряете результат выполнения программы. Однако, команда screen это не просто виртуальный терминал, это нечно большее.
Например, с ее помощью в терминал можно послать команду, выполнить ее и получить результат ее выполнения в тектовый файл. Это можно использовать для автоматическомго тестированиия консольных утилит.
# запускаем screen
screen -S some_window
В другом терминале делаем следующее:
# пишем ls
screen -S some_window -X stuff 'ls'
# посылаем возврат каретки
screen -S some_window -X eval "stuff \015"
Чтобы видеть то что происходит в другом терминале подключаем вывод в файл:
# задаем местоположение файла для вывода
screen -S some_window -p 0 -X logfile ~/filename.txt
# включаем вывод в файл
screen -S some_window -p 0 -X log on
Все что происходит в пользовательской сессии "some_window" будет доступно в файле ~/filename.txt.
Клавиша Compose
Клавиша compose позволяет вводить специальные символы в Linux типа ä или á.
Для этого нужно сначала коротко нажать compose затем клавишу модификатор, например ', затем модифицируемую клавишу, например e.
compose . e | ė |
compose ' e | é |
compose " e | ë |
compose _ e | ē |
compose - e | ē |
compose ? e | ẻ |
compose # e | ♪ |
compose s s | ß |
Еще больше сочетаний можно найти на страничке в википедии посвященной клавише Compose.
Физически на клавиатуре нет клавиши Compose. В качестве клавиши Compose можно назначить любую клавишу по выбору. По умолчания в Linux в качестве Compose настроен правый ctrl.
Получается, с клавишей Compose для набора текстов на немецком или испанском языках специальные национальные клавиатуры становятся не нужны.
Однако, с этой клавишей есть одна существенная проблема - клавиша Compose не поддерживается из коробки в Windows но есть большое разнообразие программ для ее емуляции например WinCompose. Для Macos все сложнее, на маке используются собственные сочетания клавиш для набора специальных символов и диакритики, поэтому проектов для поддержки клавиши Compose не так много но они тоже есть.
Копирование текста из терминала без мыши
При работе в терминале, иногда бывает необходимо скопировать часть экрана без помощи мыши. Для решения этой задачи вам может пригодиться команда screen которая значительно расширяет возможности работы со стандартным терминалом.
Одной из полезных функций этой программы является так называемый copy-режим когда экран можно скролировать и выделять.
Чтобы скопировать часть экрана в терминале а потом вставить проделайте следующее:
- Запустите команду screen
- Для входа в copy-режим нажмите CTRL-A ESC
- Стрелками или клавишами hjkl перейдите в начала блока, который нужно выделить
- Нажмите ENTER для начала выделения
- Стрелками или клавишами hjkl перейдите в конец выделения, при этом выделенный фрагмент будет подсвечен
- Нажмите ENTER еще раз. Команда screen перейдет в нормальный режим.
- Для извлечения скопированного фрагмента из буфера наберите CTRL-A ]
Screen может пригодиться и для многих других вещей, например, для сохранения долгой терминальной сессии на сервере, когда нет возможности поддерживать соединение постоянно.
Вот здесь нашел хорошую шпаргалку на этот случай.
Распознавание голосовых заметок
Долгое время не давало покоя навязчивое желание реализовать автоматическое распознавание своих голосовых заметок.
На мобильнике у меня стоит диктофон, куда я время от времени наговариваю голосовые заметки. Заметки эти чаще всего так и остаются в виде файлов и остаются лежать мертвым грузом. Лишь изредка я их преобразую в текст и куда нибудь сохраняю. Как было бы здорово если бы распознавание заметок происходило автоматически без моего вмешательства!
Но ведь яж компьютерщик! Сегодня, наконец, удалось завершить начатое и автоматизировать процесс!
Записанные заметки я синхронизирую при помощи Syncthing на свой маленький домашний сервер. На сервере небольшой bash скрипт по crontab каждые десять минут проверяет не появился ли новый wav файл из диктофона и, если появился, скармливает его системе распознавания Kaldi. Полученный текстовый файл сохраняется на диске и пересылается на мою электронную почту.
Решение не требует никаких внешних API типа Google или Яндекса - все происходит в оффлайне. Правда, из-за этого, решение достаточно объемное - языковая модель весит около гигабайта и ещё примерно столько же - сама система распознавания. Работает, однако, решение достаточно надёжно. Пока поддерживается только русский язык, но вполне возможно научить распознавать и другие языки.
Кстати, русская языковая модель больше не доступна на сайте разработчика. У меня сохранился старый архив, если кому-нибудь будет нужна - дайте знать, - поделюсь.