- PVSM.RU - https://www.pvsm.ru -
В предыдущей статье [1] мы обсуждали klipper — замечательную программу для управления буфером обмена в KDE. Мы узнали как расширить её функциональность с помощью скриптов и показали пару простых примеров, которые могут облегчить жизнь пользователям.
Сегодня мы продолжим писать скрипты и сделаем klipper ещё удобнее.
Пользователям основанных на Debian дистрибутивов время от времени приходится добавлять ppa репозитории, например, чтобы обновить версию вашего любимого TeX-редактора kile, в которой исправили несколько неприятных ошибок.
Конечно, времена, когда нужно было редактировать /etc/apt/sources.list
вручную, а затем обращаться к серверу ключей, чтоб подписать репозиторий, давно прошли, и теперь всё это можно сделать одной командой
sudo apt-add-repository ppa:kile/stable
но нет придела человеческой лени! Ведь после добавления репозитория нужно ещё обновить списки пакетов и аж после этого обновить kile. При этом ещё и терминал открывать придётся, а это, как у китайцев — путь длиною в тысячу ли, движение пальца до клавиши F12!
Ну уж нет, на такие подвиги я точно не способен. К тому же, раз нам всё равно придётся копировать адрес репозитория в буфер обмена, то пусть он сам с ним и справляется. Думаю это справедливо.
Добавим новое действие в klipper и назовём его «Manage apt reository». Потребуем, чтоб это действие выполнялось автоматически если содержимое буфера соответствует регулярному выражению
ppa:[A-Za-z0-9_-]*/[A-Za-z0-9_-]*
то есть содержит в себе имя репозитория.
Далее добавим команду вывод которой будем игнорировать. Дадим ей название «Add apt repository and update your system»
kdesudo --comment "Do you want to add repository?
$(echo -n %s | grep -o "ppa:[A-Za-z0-9_-]*/[A-Za-z0-9_-]*")" -c "apt-add-repository -y "$(echo -n %s | grep -o "ppa:[A-Za-z0-9_-]*/[A-Za-z0-9_-]*")"; apt-get update; muon-updater"
Мы используем kdesudo
для графического запроса пароля на выполнение набора команд с правами суперпользователя. Параметр -c
принимает список команд разделённых ;
или &&
. Мы добавляем репозиторий с помощью apt-add-repository
, обновляем систему и вызываем muon-updater для подтверждения обновления пакетов (в своей системе вы возможно захотите использовать kpackagekit или даже обновляться без подтверждения apt-get upgrade -y
).
Теперь достаточно просто выделить текст содержащий имя репозитория, чтоб увидеть выпадающее меню
ввести пароль
и подтвердить обновление пакетов
Удалить репозиторий можно аналогично, воспользовавшись командой ppa-purge
Плагинами которые добавляют в статус IM название песни которую вы слушаете сейчас уже никого не удивишь, но мы пойдём чуть дальше, и по нажатию на нужную комбинацию клавиш будем делится ссылкой на страницу youtube с результатами поиска прослушиваемой песни. Действовать будем так:
при этом информируем пользователя о том, что происходит с помощью kdialog.
Для работы с dbus мы используем удобную программу qdbus с интуитивно понятным интерфейсом и удобными подсказками. Общий синтаксис qdbus выглядит следующим образом
qdbus [servicename] [path] [method] [args]
так, например, получение метаданных для проигрываемой в плеере cantata песне
qdbus org.mpris.MediaPlayer2.cantata /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Metadata
а благодаря интерфейсу mpris для любого другого плеера (который этот интерфейс поддерживает) нужно всего лишь заменить cantata на название плеера.
Вставка содержимого в klipper произвотдится так же легко с помощью одной строчки
qdbus org.kde.klipper /klipper org.kde.klipper.klipper.setClipboardContents "New bufer entry"
Теперь осталось повесить выполнение скрипта на какую-нибудь комбинацию клавиш (Alt+Y кажется мне вполне удобной). Для этого зайдём в «Параметры системы-Комбинации клавиш и росчерки-Специальные действия» и добавим глобальную комбинацию клавиш для запуска нашего скрипта
Готовый текст скрипта можно найти в конце статьи.
Как часто случается, что вы сидите, удобно устроившись в кресле, за просмотром новой серии футурамы и тут вам пишет брат, друг, девушка, гуру и духовный наставник (нужное подчеркнуть) и просит вас поделится ссылкой. У меня такое случается довольно часто. И тут проблема даже не в том, что это долго и неудобно, часто я даже не помню откуда же я скачал это замечательное творение американского кинематографа. Так было принято решение написать небольшой скрипт, который позволит не отрываясь от просмотра — поделится этим видео с другими.
Мы будем использовать netcat-openbsd который установлен по умолчанию во всех дистрибутивах Kubuntu. Важно, что такой способ сработает только в случае если ваш внешний IP совпадает с внутренним или у вас есть возможность пробросить порт, если вы сидите за раутером (мы будем использовать порт 3333, я настроил раутер так, что все запросы на этот порт он перенаправляет на мой ноутбук, на котором я и смотрю футураму).
Я привык к видеоплееру VLC, а потому нужно сначала настроить его для работы через dbus. Для этого я поправил /usr/share/applications/vlc.desktop
в котором строчку начинающуюся на Exec модифицировал таким образом
Exec=/usr/bin/vlc --control dbus %U
После этих манипуляций VLC начинает использовать dbus.
Так как я использую скрипт на ноутбуке и по этому внешний IP адрес у меня меняется (хотя почти везде я имею возможность пробросить порт 3333 на свою машину) в переменной HOST
я не буду явно указывать внешний IP адрес, а буду определять его автоматически с помощью запроса
HOST=`wget -qO - icanhazip.com`
Общая стратегия скрипта такова
nc -l 3333 < /full/name/of/the/video/file.avi
Осталось только повесить выполнение скрипта на какую-нибудь глобальную комбинацию клавиш (я использую Alt+N). Теперь когда вас просят поделится видео достаточно просто нажать выбранную комбинацию клавиш и вставить полученную команду с помощью Ctrl+V в клиент обмена сообщениями. На принимающей стороне нужно будет всего лишь скопировать эту команду и выполнить её в терминале…
Но зачем нам открывать терминал, если нужная нам команда неизбежно попадает в буфер обмена? Создадим новое действие в klipper и назовём его NetCat. Потребуем, чтоб действие выполнялось автоматически если содержимое буфера содержит подстроку соответствующую регулярному выражению
nc -q 0 .* > ~/".*"
Затем добавим новую команду, назовём её «Receive a file with netcat». Вывод команды будем игнорировать. Сама команда будет ничем иным как выполнением строки соответствующей регулярному выражению и последующим уведомлением пользователя
eval $(echo %s | grep -o "nc -q 0 .*~/".*""); kdialog --title "NetCat" --passivepopup "File transfer complete:
"$(echo %s | grep -o "~/".*"")"" 2
Мы используем bash функцию eval
для выполнения строки с перенаправлением ввода-вывода.
Теперь достаточно просто выделить строку содержащую команду приёма файла и выбрать соответствующий пункт в выпадающем меню
принимаемый файл сохранится в домашнюю директорию.
Ну вот на сегодня и всё. В следующий раз мы продолжим развивать тему скриптов в KDE.
Ссылки на скрипты
now_playing.sh [2]
now_watching.sh [3]
Ищите красивые коленки, пишите скрипты и оставайтесь с нами!
Автор: Large
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/10722
Ссылки в тексте:
[1] предыдущей статье: http://habrahabr.ru/post/146587/
[2] now_playing.sh: http://code.google.com/p/lapscripts/downloads/detail?name=now_playing.sh&can=2&q=#makechanges
[3] now_watching.sh: http://code.google.com/p/lapscripts/downloads/detail?name=now_watching.sh&can=2&q=#makechanges
Нажмите здесь для печати.