Проигрывание аудио файлов и роликов с youtube с управлением скриптами
Эта статья прежде всего о возможностях систем linux, хотя
практическая ценность приведенных примеров тоже имеет место.
Статья предназначена для новичков в Линукс.
Чтобы творчески переработать скрипты под свою систему нужно
минимальное представление о программировании.
Используемые программы:
mpv # Плеер, переработанный и дополненый mplayer
i3blocks-1.4 # Панель для i3
xfce4-terminal # Быстрый эмулятор терминала.
утилиты:
xsel # Работа с буфером обмена из командной строки
socat # Работа с сокетами из командной строки
notify-send # Простые уведомления из bash. Удобно использовать для отладки
в тех местах, где скрипт выполняется не в терминале.
Итак, есть рабочий компьютер, на котором переодически играет музыка. Это либо
mp3 - файлы, либо youtube-ролики. Задача -- управление проигрыванием с панели.
С нее и начну. Панель i3blocks применяется с тайловым менеджером окон i3.
Принцип ее работы очень прост. С определенным интервалом она выполняет скрипты
или программы и результат их работы выводит на панель. Кроме того, программа
выполняет скрипт по нажатию клавиш мыши и передает эти нажатия скрипту.
Воспроизведение. Для него я использовал плеер mpv, переработанную версию
mplayer'а. Его достоинства -- умеет воспроизводить ролики youtube (с помощью
youtube-dl) и управляется через socket, то, что мне нужно.
Чтобы mpv принимал команды через socket, ему нужно задать опцию при запуске
или записать её в конфигурации.
--input-ipc-server=~/.config/mpv/socket - для командной строки
input-ipc-server=~/.config/mpv/socket - для файла конфигурации mpv.conf
Для добавления youtube-роликов я использую буфер обмена. С определенным
интервалом скрипт будет просматривать буфер обмена и если в нем будет
ссылка на ролик youtube, он будет добавлять его в плейлист плейера.
Итак, нужно 4 скрипта. Проигрывание/пауза, вперед, назад и скрипт для работы с буфером обмена.
Все скрипты должны выводить свои "кнопки", если mpv запущен.
Скрипты должны иметь разрешение на запуск, кто забыл: chmod +x scriptname
Скрипты prev и next отличаются лишь строкой вывода и командой mpv. Привожу
prev:
Для i3blocks config
[prev] # Имя скрипта (нужно сделать его запускаемым, chmod +x prev)
interval=10 # Интервал не может быть нулевым, ставим не слишком малый, с потолка.
[play_pause]
interval=5# Запускается раз в 5 секунд.
[next]
interval=10
Итак, теперь, если запустить mpv ~/mymusic/*mp3 или
mpv --input-ipc-server=~/.config/mpv/socket ~/mymusic/*mp3
то воспроизведением можно будет управлять с панели.
Теперь приступим к видео с youtube. i3blocks будет запускать скрипт раз в
секунду, а тот будет проверять буфер на предмет соответствия ссылке на
youtube. Проверять будем sed'ом.
Если кому-то нужно расписать команду sed - спрашивайте в комментариях.
Нужно добавить в ~/.config/i3blocks/config:
[mappendlst]
interval=3
Перезапуск i3 mod+shift+r и можно пользоваться.
PS. Ну и для тех, кто пользуется i3 и i3blocks, но еще не освоился там, добавлю.
i3blocks позволяет запускать скрипт по сигналам unix. Это удобно использовать
для индикатора раскладки клавиатуры.
В i3blocks config пишем
[lang]
signal=10
Сам lang:
s = $(xset -q |sed -n '8 s/12\: Group 2\: \+\(on\|off\?\).\+/\1/p')
if [ $s == "on" ]; then
echo "RU"
else
echo "EN"
fi
В i3/config
bindcode 105 exec pkill -SIGRTMIN+10 i3blocks # 105 - Код правого Control'a.
# pkill - отправить сигнал процессу
Узнать код своего переключателя - xev
Вопросы, замечания и предложения приветствуются.
К сожалению, pikabu не умеет в форматирование, пришлось делать скриншоты, а сами файлы тут:
https://disk.yandex.ru/d/vpEy-S1J_9aUzQ
Полезные вещи:
Advanced Bash Scripting Guide pdf - Почти все для bash scripting.
https://mpv.io/manual/stable/#command-interface Другие полезные команды для mpv.
Добавление алиасов в Ubuntu
В файл .bash_profile добавляем строку по образцу:
alias emptytrash="rm -rf ~/.local/share/Trash/files/*"
Где emptytrash - имя алиаса.
В терминале:
source .bash_profile
Готово! Теперь после ввода emptytrash будет очищаться корзина.
Если вы используете zsh, то вместо .bash_profile - вносите изменения в .zshrc.
---
https://t.me/s/filimonovvadim
X_x
Скрипт
#!/bin/bash -x
# Скрипт запускается по нажатию горячих клавиш и открывает файл с названием заголовка активного окна из своей директории.
bdir="$HOME/scripts/context_notes"
#notify-send "$(xprop -id $(xdotool getactivewindow)|grep _NET_STARTUP)" -t 9000
cd $bdir
view=""
if [ -z "$1" ]; then
if [ ! "$1" == "view" ]; then
view="view"
fi
wid="$(xdotool getactivewindow)"
else
wid="$1"
echo $wid
fi
#notify-send "$wid" -t 2000
pid="$(xprop -id $wid |grep "_NET_WM_PID(CARDINAL)" |grep -o "[0-9]*")"
#title="$(xwininfo -id $wid |grep xwininfo | grep -o "\".*\"" )"
#title="${title//\"/}" #удалить кавычки
comm="$(ps -q $pid -o comm=)"
args="$(ps -q $pid -o args=)"
#notify-send "$args" -t 9000
#notify-send "$title w:$wid pid:$pid comm:$comm" -t 9000
if [ -e "$comm" ]; then
echo "Ok";
else
mkdir "$comm"
fi
cd $comm
if [ "$comm" = "firefox" ]; then
s="$(xwininfo -id $wid |grep xwininfo | grep xwininfo | grep -o "\".*\*\/;\*")"
title="${s:1:(-4)}"
url="$(xwininfo -id $wid |grep xwininfo | grep -o "\*\/;\*.*\ Mozilla" | cut -d" " -f 2)"
# notify-send $url -t 9000
elif [ "$comm" = "zathura" ]; then
title="$(xwininfo -id $wid |grep xwininfo | sed -e "s/[^\"]*\"\([^[]*\).*/\1/" )"
url="$(xwininfo -id $wid| grep xwininfo | sed -e "s/.*\[\(.*\)\]\"/\1/")"
notify-send "title:$title url:$url" -t 9000
elif [ "$comm" = "viewnior" ]; then
title="$(xwininfo -id $wid |grep xwininfo | sed -e "s/[^\"]*\"\([^\"]*\)\"/\1/" |rev | sed -e "s/%[0-9]*\ -\ [0-9]*\/[0-9]*\ -\ \(.*\)/\1/" |rev )"
url="$(xwininfo -id $wid |grep xwininfo | sed -e "s/[^\"]*\"\([^\"]*\)\"/\1/" |rev | sed -e "s/\(%[0-9]*\ -\ [0-9]*\/[0-9]*\)\ -\ .*/\1/" |rev )"
#notify-send "title:$title url:$url" -t 9000
else
title="$(xwininfo -id $wid |grep xwininfo | grep -o "\".*\"" )"
title="${title//\"/}" #удалить кавычки
url=""
fi
cur="command:\"$args\" url:\"$url\""
#Нужно проверить последнюю запись и если изменений нет, то не добавлять.
last="$(cat "$title" |grep "command")"
if [ "$view" = "view" ]; then
notify-send "$(cat "$title")" -t 10000
else
touch "$title"
if [ "$last" == "$cur" ]; then
notify-send "Равно" -t 9000
echo
else
echo "$cur" >> "$title"
fi
gvim --role context_notes -geometry 58x21+792-90 "$title"
fi
#cur="pid:$pid wid:$wid url:$url"
#notify-send "$(lsof -w -p $pid |grep home)" -t 9000
#notify-send "$(ps -q $pid -o comm=)" -t 9000
#Заголовок, win_id, нужно бы имя файла
#Структура -- pdir / имя приложения / заголовок=имя файла, дописать в файл всю информацию и открыть её в gvim, в плавающем окнежен
# disown
+++++++++++++++++++++++
Если прилепить поиск grep+dmenu будет совсем кошаладно
на фарефокс нужен плагин, шоб url в title /выводил
разделитель */;* или типа того. zathura eтоже и страницы правится в config/
Своя сборка убунту в один клик
Приветствую всех кто интересуется Linux, недавно у меня появилась срочная необходимость собрать свою сборку убунту , о том как я это делал я хочу написать ниже:
Что первым делает адекватный человек без аналогичного опыта когда ему ставят такую задачу ? правильно! идет в гугл) в ходе гугления я был удивлен тем фактом что для того что бы сделать то что я хочу нужно:
- скачать "файловую систему" убунту
- в режиме chroot (sudo chroot [ каталог с файловой системой ]) выполнить нужную настройку
- cкачать файлик vmlinuz он же ядро
- и естественно скачать initrd она же временная файловая система (если быть точным Initial RAM Disk)
Дальше , после нескольких манипуляций а именно сжатия всего в squashfs и упаковки в iso-шник я получил то что нужно.
Ну вот , я заметил кучу багов и того что я не доделал , и в течении недели приходилось это все пересобирать до посидения, в итоге мной было принято решения написать баш скрипт по автоматизации всего и вся, работает на ура,сам скрипт ниже)
sudo apt-get install git && git clone https://github.com/GIThunte/build-ubuntu.git
Использование:
Первое на что хотелось бы обратить внимание это системные требования:
Желательно ubuntu 16.04
и установленные приложения
debootstrap
syslinux
isolinux
squashfs-tools
genisoimage
rsync
(Установить их можно так - sudo apt-get install debootstrap syslinux isolinux squashfs-tools genisoimage rsync -y )
Ну и самый важный момент , вам зарание нужно скачать vmlinuz и initrd а так же кинуть их на какой то свой мега ftp, все это дело делается просто, ниже мануал:
1 - sudo apt-get install vsftpd
2 - открываем любым редактором файл /etc/vsftpd.conf , ищем там строку anonymous_enable=NO и меняем NO на YES
3 - перезапускаем сервис sudo service vsftpd restart
4 - идем по этой ссылке : https://drive.google.com/file/d/1m2-G9hVsyO_abBNZxHGAsCZTfYt... и скачиваем архив
5 - дальше выполняем распаковку этих файлов в корень ftp ( у меня это /srv/ftp/ )
если вы сделалали на рабочей системе все правильно , то после перехода по адресу ftp://localhost/ вы должны увидеть 2 файла котрые вы распаковали в каталог ftp
после этого , вам нужно войти в каталог со скриптом и сделать ls увидеть вы должны примерно такой список файлов :
base_img.conf
base_img.sh
FILES
install.sh
README.md
start.sh
вам нужны только два файла base_img.conf и install.sh
base_img.conf это скажем так конфиг скрипта , все что возможно изменить , меняется там
install.sh это очень важный файл , в нем языком bash описывается все что вы хотите изменить в самом образе , например если вы хотите добавить в вашу сборку редактор vim то в конце напишите :
sudo apt-get install vim
(крч это обычный баш скрипт что выполняется в chroot-e)
Последним шагом будет редактирование конфигурационного файла base_img.conf
просто найдите там строки:
INITRD_URL="ftp://zos-ftp.com/initrd.gz"
VMLINUZ_URL="ftp://zos-ftp.com/vmlinuz"
и zos-ftp.com замените на localhost ( крч кто понимает это просто переменные с адресом откуда wget будет тянуть vmlinuz и initrd ) это может быть и прямая ссылка на эти файлы в файлообменнике
так же можете отредактировать файл isolinux.cfg в каталоге FILES
дальше просто пишем :
sudo bash start.sh
спустя некоторое время , в каталоге /srv/BUILD будет лежать ваш iso файл убунту
так же можете описать примерно так :
sudo bash http://archive.ubuntu.com/ubuntu/ /home/ваше имя пользователя/MYUBUNTU
и в каталоге
/home/ваше имя пользователя/MYUBUNTU будет ваше iso
PS: Все это писал для себя,если что то вам не нравится в коде вы можете или переписать его или не использовать=)
Ссылке по теме:
https://willhaley.com/blog/create-a-custom-debian-stretch-li...
Помощь по написанию скрипта Bash
#!/bin/bash
echo "The user logged in is:"
pass=12345
echo -en "Enter the password:"
read rightpass
if [[$pass -eq $rightpass]];
then
echo "Hello, Mr.Admin"
else
echo "Sorry, try again"
fi
echo "1 - time, 2 - system information, 3 - list of active users"
echo -en "Choose the next step:"
read choose
time= date +"%T"
info= whoami
infousers= who|cut -d ' ' -f1 |sort|uniq
if [[$choose -eq 1]];
then
echo "Current time :\n $time \n"
elif [[$choose -eq 2]];
then
echo "$info"
elif [[$choose -eq 3]];
then
echo "$infousers"
fi
Не знаю почему, но все if не работают и почему-то в консоле также высвечиваються переменные time, info, infousers (хотя не должны). Я думаю это опять таки из-за ифов. Спасибо за помощь!
P.S. И как сделать break после неправильного пароля в первом if
Поиграем в бизнесменов?
Одна вакансия, два кандидата. Сможете выбрать лучшего? И так пять раз.
В Магазине Windows опубликовано два дистрибутива SUSE Linux
Ещё несколько лет назад за такой заголовок вполне можно было получить путёвку в санаторий для душевнобольных, но в мире сегодняшней Microsoft он звучит вполне нормально: просто для Windows 10 и WSL (Bash) доступны новые дистрибутивы Linux, обещанные некоторое время назад.
Напомню, впервые энтузиасты запустили SUSE в среде WSL ещё в январе этого года, в мае разработчики Windows 10 официально сообщили о намерении расширить список поддерживаемых дистрибутивов, включив в него кроме Ubuntu ещё и SUSE, и Fedora. В конечном счёте разработчики WSL планируют сделать эту платформу независимой от типа дистрибутива вообще.
В каталоге Магазина Windows сейчас представлено два дистрибутива SUSE: openSUSE Leap 42, предназначенный широкому кругу пользователей, и созданный на его основе, «коммерческий» SUSE Linux Enterprise Server 12. Распространяются они бесплатно, для использования необходимо включить WSL (Bash).