августа 08, 2022, 18:29:17

Новости:

Перейти на сайт https://xubuntu-ru.net


Лень-двигатель прогресса

Автор danwer, июля 17, 2022, 16:06:34

« предыдущая - следующая »

danwer

июля 17, 2022, 16:06:34 Последнее редактирование: июля 17, 2022, 16:30:04 от danwer Причина: Неверная ссылка на видео
    Всем большой привет! Вношу свою лепту в продолжение темы "Руководство по допиливанию.. " на примере el guahiro с его полезными  ПКМ Thunar скриптами. На данный момент уважаемый el выкладывает свои наработки не сюда на форум, а в телеграмм-канал  Xubuntu-ru.net и это понятно - сейчас обратной связи нет с форумчанами. Но я всё-таки решил написать сюда дабы малёха оживить уснувший форум. А речь пойдёт об обработке видеоссылок (youtube, rutube, OK, VK, и т.д.). Во многих случаях гораздо удобнее просматривать видео не в браузере, а во внешнем плейере, а т.к. при этом хочется вдобавок ещё и gui-удобств, то и возникла у меня идея своять скрипт. Как говорится лучше один раз увидеть, чем читать бредни разработчика, коим я не очень то и являюсь 😂. Поэтому смотрим кино:
Спойлер
videolinks
[свернуть]

Итак, по-порядку. Должны быть установлены некоторые утилиты.
Устанавливаем mpv:
sudo apt install mpvПри этом автоматом установится youtube-dl, но он нам не нужен ввиду различных косяков и это совсем другая история.
Вместо него будем использовать yt-dlp.
Установка yt-dlp:
sudo wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp
sudo chmod 755 /usr/local/bin/yt-dlp
sudo apt purge -y youtube-dl
sudo mv /usr/local/bin/yt-dlp /usr/local/bin/youtube-dl
Если система 22.04 , то последняя команда (переименование с youtube-dl в yt-dlp ) не нужна.

Установка остальных утилит:
sudo apt install yad xsel wmctrl xdotool
Вместо zenity я применяю yad, т.к. у него больше возможностей. Например, zenity для выбора пунктов меню использует старинные радиобаттоны. Но это было бы ерунда если бы тыкание мышкой в строчку выбора срабатывало. Нет же - нужно обязательно в кругляшок попасть. Неудоообно! В yad такой проблемы нет. Правда в yad я не мог сначала корректно заставить работать пульсирующий прогресс-бар. Но потом победил )).

Теперь, когда необходимые утилиты установлены, нужно положить в /usr/local/bin/ скрипт link_youtube.sh:
#!/bin/bash


         # ОБРАБОТКА ВИДЕОССЫЛОК В БРАУЗЕРАХ (youtube и т.д.) (Alt + Y)


# Создание каталога Разное, если его нет
if ! [ -d "/home/$USER/Видео/Разное" ]; then
mkdir "/home/$USER/Видео/Разное"
fi


# Присвоение переменной url значения из буфера обмена
url=$(xsel --clipboard --output)


# оставляем в названии будующего файла только 70 начальных символов
b=${url:6:76}

# убираем из скопированного буфера обмена символ прямого слэша, запрещённый для имён файлов в линуксе
c=${b////}


# Воспроизведение в mpv или скачивание или создание ссылки
choice=$(yad --list --column="                 Выбор действия":tip "Воспроизвести в MPV плейере" "Создать ссылку в ~/Видео/Разное/" "Скачать видео в ~/Видео/Разное/" \
--title "" \
--skip-taskbar --window-icon=/usr/local/icons/app/yad/hand_up.png --width=300 --height=190  \
    --text "Что сделать?:" \
       )

# Удаление последнего символа | , т.к yad косячно добавляет его в конце
if [[ "$choice" == *\| ]]; then
choice=${choice::-1}
fi


if [[ $choice == "Воспроизвести в MPV плейере" ]]; then

   
# Выбор качества видео
quality=$(yad --list --column="":tip "Авто" "360p" "720p" \
--title "" \
--skip-taskbar --window-icon=/usr/local/icons/app/yad/quality.png --width=250 --height=190  \
    --text "          Выбор качества видео:" \
       )

if [ $? -ne 0 ]; then
exit
    fi

# Удаление последнего символа | , т.к yad косячно добавляет его в конце
if [[ "$quality" == *\| ]]; then
quality=${quality::-1}
fi


if [ $quality == "360p" ]; then
quality="18"
fi


if [ $quality == "720p" ]; then
quality="22"
fi


# Запуск mvp
    if [ $quality == "Авто" ]; then
        mpv --ytdl-format=best "$url" &
pid1=$!
while true
  do
  printf "$i\n"
    sleep 0.5
if wmctrl -l | grep -q 'mpv'; then
    wmctrl -F -c 'Запуск видеоссылки в MPV..' && break
fi

  done | (yad --skip-taskbar --progress --title="Запуск видеоссылки в MPV.." --auto-close --no-cancel --pulsate --button=Отмена:35 --progress-text=" " --window-icon=/usr/local/icons/app/yad/internetvideo.png --geometry=300x80)

  if [ $? = 35 ]; then
kill -9 $pid1
  fi


    else
mpv --ytdl-format=$quality "$url" &
pid2=$!
while true
  do
  printf "$i\n"
    sleep 0.5
if wmctrl -l | grep -q 'mpv'; then
    wmctrl -F -c 'Запуск видеоссылки в MPV..' && break
fi

  done | (yad --skip-taskbar --progress --title="Запуск видеоссылки в MPV.." --auto-close --no-cancel --pulsate --button=Отмена:35 --progress-text=" " --window-icon=/usr/local/icons/app/yad/internetvideo.png --geometry=300x80)

  if [ $? = 35 ]; then
kill -9 $pid2                   
  fi

    fi


fi



if [[ $choice == "Создать ссылку в ~/Видео/Разное/" ]]; then


# создаём пустой файл URL.desktop в /home/$USER/Видео/Разное/
touch /home/$USER/Видео/Разное/URL.desktop

# наполняем файл URL.desktop необходимыми строками
echo -e [Desktop Entry] > /home/$USER/Видео/Разное/URL.desktop
echo -e Version=1.0 >> /home/$USER/Видео/Разное/URL.desktop
echo -e Type=Link >> /home/$USER/Видео/Разное/URL.desktop

if [[ $url == *"youtu"* ]]; then
echo -e Icon=/opt/DC/icons/net/youtube.png >> /home/$USER/Видео/Разное/URL.desktop
else
echo -e Icon=/opt/DC/icons/url_stream.png >> /home/$USER/Видео/Разное/URL.desktop
fi


echo -e URL="$url" >> /home/$USER/Видео/Разное/URL.desktop
echo -e Comment=Stream:yes >> /home/$USER/Видео/Разное/URL.desktop

# переименовываем файл URL.desktop
mv /home/$USER/Видео/Разное/URL.desktop /home/$USER/Видео/Разное/$c.desktop

# Изменяем права ./$c.desktop
chmod 775 /home/$USER/Видео/Разное/$c.desktop

yad --skip-taskbar --window-icon=/usr/local/icons/app/yad/empty.png --title="Инфо" --button="gtk-ok:0" --image=/usr/local/icons/app/yad/ok.png --text="Готово! \nСсылка лежит в ~/Видео/Разное/   "


fi


if [[ $choice == "Скачать видео в ~/Видео/Разное/" ]]; then


# Выбор качества видео
quality=$(yad --list --column="":tip "Авто" "360p" "720p" \
--title "" \
--skip-taskbar --window-icon=/usr/local/icons/app/yad/quality.png --width=250 --height 190  \
    --text "           Выбор качества видео:" \
       )


if [ $? -ne 0 ]; then
exit
    fi

# Удаление последнего символа | , т.к yad косячно добавляет его в конце
if [[ "$quality" == *\| ]]; then
quality=${quality::-1}
fi


# запуск терминала с параметром -e

    if [ $quality == "Авто" ]; then
x-terminal-emulator -e sh -c 'echo " " ;
                                      url=$(xsel --clipboard --output);
                                     
                                      youtube-dl -f best -o "~/Видео/Разное/%(title)s-%(id)s.%(ext)s" $url ;


                                      echo " " ;
                                      echo " " ;

                                      echo "Готово! \nСкаченное видео лежит в ~/Видео/Разное/ " ;

      echo " " ;
 
                                      echo -n "\033[37;1;41m "Нажмите [ENTER] для выхода.." \033[0m" ; read a'

    fi



    if [ $quality == "360p" ]; then
x-terminal-emulator -e sh -c 'echo " " ;
                                      url=$(xsel --clipboard --output);
                                     
                                      youtube-dl -f 18 -o "~/Видео/Разное/%(title)s-%(id)s.%(ext)s" $url ;


                                      echo " " ;
                                      echo " " ;
 
                                      echo -n "\033[37;1;41m "Нажмите [ENTER] для выхода.." \033[0m" ; read a'

    fi


 
    if [ $quality == "720p" ]; then
x-terminal-emulator -e sh -c 'echo " " ;
                                      url=$(xsel --clipboard --output);
                                     
                                      youtube-dl -f 22 -o "~/Видео/Разное/%(title)s-%(id)s.%(ext)s" $url ;


                                      echo " " ;
                                      echo " " ;
 
                                      echo -n "\033[37;1;41m "Нажмите [ENTER] для выхода.." \033[0m" ; read a'

    fi

fi


В этом скрипте поправьте пути к своим картинкам, если они будут лежать в других местах.
И наконец, делаем значок запуска:
[Desktop Entry]
Name=Запуск видеоссылок в MPV
Comment=Запуск видеоссылок в MPV
Exec=/usr/local/bin/link_youtube.sh
Type=Application
Categories=Network
Icon=/usr/local/icons/internetvideo.png
Terminal=false

Ложим его либо в /usr/share/applications/ либо в ~/.local/share/applications/  для того,чтобы он появился в whisker-меню.
Ну и для удобства назначим горячие клавиши на /usr/local/bin/link_youtube.sh. У меня это Alt+Y (Все настройки - Клавиатура - Комбинации клавиш).
Готово!
Если будут вопросы, то задавайте в телеграмм-группу Xubuntu-ru.net, а то сюда пока нет доступа ((

danwer

Было дело, el guahiro среди 100500 своих скриптов показал как извлекать текст из картинок.
Взяв его скрипт за основу представляю свой вариант, главным отличием в котором является использование утилиты scrot. В результате можно извлекать не только весь текст из картинки, а ещё и отдельные фрагменты. Опять, сначала смотрим кино:
Спойлер

Устанавливаем необходимые утилиты, если их нет:
sudo apt install scrot yad tesseract-ocr tesseract-ocr-rus
В /usr/local/bin/ ложим скрипт ocr.sh:
#!/bin/bash

              # ИЗВЛЕЧЕНИЕ ТЕКСТА ИЗ ИЗОБРАЖЕНИЯ
sleep 1
name=$(date '+%d-%m-%Y_%H:%M:%S')

scrot -sf '/tmp/0.png' -e 'xclip -selection clipboard -target image/png -i'

mogrify -resize 400% -modulate 110,110,100 -median 1 -blur 0x0.4 -unsharp 0x12+2+0 -density 300 /tmp/0.png
tesseract /tmp/0.png /tmp/0 -l eng+rus --psm 6 &> /dev/null &
pid1=$!
while true
do
printf "$i\n"
    sleep 0.5
if ! [[ $(ps | grep "$pid1") ]]; then
break
fi
done | (yad --skip-taskbar --progress --title="Извлечение текста.." --auto-close --no-cancel --pulsate --button=Отмена:35 --progress-text=" " --window-icon=/usr/local/icons/app/yad/empty.png --geometry=300x90)

  if [ $? = 35 ]; then
kill -9 $pid1
  fi

mv /tmp/0.txt ~/Документы/ocr/$name.txt

#Удаление последней строки с кракозяброй
sed -i '$ d' ~/Документы/ocr/$name.txt     

rm -f /tmp/0.png

yad --skip-taskbar --window-icon=/usr/local/icons/app/yad/empty.png --title="Инфо" --button="gtk-ok:0" --image=/usr/local/icons/app/yad/ok.png --text="Готово! \nИзвлечённый текст лежит в ~/Документы/ocr/   "


В /usr/share/applications/ или в ~/.local/share/applications/ ложим значок запуска:
[Desktop Entry]
Name=OCR
Comment=Распознавание текста на картинках
Exec=/usr/local/bin/ocr.sh
Type=Application
Categories=Graphics
Icon=/usr/local/icons/ocr.png
Terminal=false

Заходим в "Все настройки" - "Клавиатура" - "Комбинации клвиш" и устанавливаем удобный хоткей на /usr/local/bin/ocr.sh. У меня Alt+O.

Готово!


danwer

Ох до чего же лень матушка довела!! Неохота залазить в меню настроек, чтобы сменить тему оформления системы ))  Как обычно, сначала смотрим кино:
Спойлер

Устанавливаем необходимые утилиты, если их нет:
sudo apt install yad wmctrl
В /usr/local/bin/ ложим 2 скрипта.
change_theme.sh:
#!/bin/bash

# Закрытие DC если был открыт
if wmctrl -l | grep -q 'Double Commander'; then
killall -s 15 doublecmd
fi

theme=$(yad --list --column="            Выбор темы системы":tip "Flat-Remix-GTK-Grey-Dark (тёмная)" "Greybird-m (светлая)" "Shades-of-gray (тёмная)" "PingGuo-white (светлая)" \
--title "" \
--skip-taskbar --window-icon=/usr/local/icons/app/yad/theme.png --width=350 --height 170  \
       )
   
    if [ $? -ne 0 ]; then
exit
    fi

if [[ $theme == "Flat-Remix-GTK-Grey-Dark (тёмная)|" ]]; then

#Изменение темы
xfconf-query -c xsettings -p /Net/ThemeName -s Flat-Remix-GTK-Grey-Dark

#Изменение темы заголовков окон
xfconf-query -c xfwm4 -p /general/theme -s Flat-Remix-GTK-Grey-Dark

fi


if [[ $theme == "Greybird-m (светлая)|" ]]; then

#Изменение темы
xfconf-query -c xsettings -p /Net/ThemeName -s Greybird-m

#Изменение темы заголовков окон
xfconf-query -c xfwm4 -p /general/theme -s Greybird-m

fi


if [[ $theme == "Shades-of-gray (тёмная)|" ]]; then

#Изменение темы
xfconf-query -c xsettings -p /Net/ThemeName -s Shades-of-gray

#Изменение темы заголовков окон
xfconf-query -c xfwm4 -p /general/theme -s Shades-of-gray

fi


if [[ $theme == "PingGuo-white (светлая)|" ]]; then

#Изменение темы
xfconf-query -c xsettings -p /Net/ThemeName -s PingGuo-white

#Изменение темы заголовков окон
xfconf-query -c xfwm4 -p /general/theme -s PingGuo-white

fi


change_b-w.sh:
#!/bin/bash

                # ИЗМЕНЕНИЕ ТЕМЫ НА ПРОТИВОПОЛОЖНУЮ (ТЁМНАЯ/СВЕТЛАЯ) В ОДИН КЛИК

# Закрытие DC если был открыт
if wmctrl -l | grep -q 'Double Commander'; then
killall -s 15 doublecmd
fi

grep "Flat-Remix-GTK-Grey-Dark" ~/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml && t="black"
grep "Shades-of-gray" ~/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml && t="black"
grep "Greybird-m" ~/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml && t="white"
grep "PingGuo-white" ~/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml && t="white"

if [[ $t == "black" ]]; then
#Изменение темы
xfconf-query -c xsettings -p /Net/ThemeName -s Greybird-m

#Изменение темы заголовков окон
xfconf-query -c xfwm4 -p /general/theme -s Greybird-m
else
#Изменение темы
xfconf-query -c xsettings -p /Net/ThemeName -s Flat-Remix-GTK-Grey-Dark

#Изменение темы заголовков окон
xfconf-query -c xfwm4 -p /general/theme -s Flat-Remix-GTK-Grey-Dark

fi


Само собой в этих скриптах поменяйте названия тем и пути к иконкам на свои.

В /usr/share/applications/ или в ~/.local/share/applications/ ложим значок запуска change_theme.desktop:
[Desktop Entry]
Name=Выбор темы системы
Comment=
Exec=/usr/local/bin/change_b-w.sh
Type=Application
Categories=System;
Icon=/usr/local/icons/themes/theme.png
Terminal=false

Задаем хоткей на /usr/local/change_b-w.sh. У меня SUPER+T. Тут есть нюанс. Нажали SUPER+T - произошло переключение на противоположную тему (например с темной на светлую). И теперь, чтобы обратно переключиться на темную тему нужно выдержать паузу секунды 3-4. Иначе ничего не произойдёт. Эта пауза нужна чтобы успел перезаписаться конфиг ~/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml.
    На этом у меня всё! Надеюсь, что эта причуда может пригодиться любителям поиграться с темами.







danwer

Во многих ОС, и Xubuntu не исключение, порой не хватает штатного таймера выключения ПК.  Через консоль это делается запросто. Например, shutdown -h +40  выключит комп через 40 минут. Ну нет же, нам как говорится gui подавай ))
Делаем такой скрипт shutdown_time.sh:
#!/bin/bash

          # ВЫКЛЮЧЕНИЕ КОМПЬЮТЕРА ПО ТАЙМЕРУ (в минутах)

# Создание переменной TIME, в которую будет сохраняться вывод команды yad
TIME=$(yad --skip-taskbar --entry --title="Выключение компьютера" --text="\nЧерез сколько минут выключить компьютер?" --window-icon=/usr/local/icons/app/yad/question.png --geometry=380x50 --button=Отмена:35 --button=OK:0)

# Если нажата кнопка "Отмена", то завершение скрипта
if [ $? = 35 ]; then
  exit
fi

# Присваиваем переменной m значение TIME умноженное на 60 (перевод в секунды)
m=$(($TIME*60))

#Отработка установленного значения таймера
sleep $m

yad --skip-taskbar --title="Выключение компьютера" --text="\nЧерез 20 секунд компьютер будет выключен! \n Отменить выключение?.." --window-icon=/usr/local/icons/app/yad/warning.png --geometry=380x50 --button=Да:35 --timeout=20

# Если нажата кнопка "Да", то завершение скрипта
if [ $? = 35 ]; then
exit
fi

# Выключение компьютера
shutdown -h now


Значок запуска shutdown_time.desktop:
[Desktop Entry]
Name=Выключение ПК по таймеру
Comment=
Exec=/usr/local/bin/scripts/shutdown_time.sh
Type=Application
Categories=System
Icon=/usr/local/icons/shutdown_time.png
Terminal=false


А если после запуска таймера обстоятельства изменились и выключать ПК не нужно? Не проблема.
Скрипт shutdown_time_off.sh:
#!/bin/bash

# ---Отмена выключение компьютера по таймеру---

yad --skip-taskbar --title="Отмена выключение компьютера по таймеру" --text="\nВы действительно хотите отменить выключение компьютера по таймеру?" --window-icon=/usr/local/icons/app/yad/warning.png --geometry=400x50 --button=Да:0 --button=Нет:35 --timeout=20

# Если нажата кнопка "Нет", то завершение скрипта
if [ $? = 35 ]; then
exit
fi

killall -s 15 shutdown_time.sh
killall -s 15 sleep

Значок запуска shutdown_time_off.desktop:
[Desktop Entry]
Name=Отмена выключения ПК по таймеру
Comment=
Exec=/usr/local/bin/scripts/shutdown_time_off.sh
Type=Application
Categories=System
Icon=/usr/local/icons/shutdown_time_off.png
Terminal=false


А если запустили таймер, потом захотели отменить его, но не отменили (ну мало ли - отвлекли вас например), то непосредственно перед выключением компа будет дан 20-ти секундный шанс отменить всё-таки выключение.


Ну и чтобы всё это работало само собой должен быть установлен yad (sudo apt install yad), либо zenity, кто пользуется им.

butjapka

и как вам с элем хватает терпения разбираться во всем этом... :laugh:

danwer

Цитата: butjapka от июля 31, 2022, 13:47:17и как вам с элем хватает терпения разбираться во всем этом... :laugh:
Ну, видимо особая привязанность к xfce :). Пробовал различные дистрибутивы, но неизменно возвращался на xubuntu. А что касается эля, то мне до него далеко с его тоннами скриптов. Я в линухе с 2018, а он значительно раньше.  :smile:

el guahiro

Цитата: danwer от июля 24, 2022, 00:35:34можно извлекать не только весь текст из картинки
У меня есть на форуме описание, как извлекать текст с фрагмента картинки https://forum.xubuntu-ru.net/index.php?topic=1117.msg13073;topicseen#msg13073
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions
Рекомендации для граждан у условиях гуманитарной катастрофы https://goo-gl.me/abV3X

el guahiro

Цитата: butjapka от июля 31, 2022, 13:47:17и как вам с элем хватает терпения разбираться во всем этом
Так лень же! Когда лень, то хватает духу что-то запилить и потом только на хоткейчики щёлкать.
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions
Рекомендации для граждан у условиях гуманитарной катастрофы https://goo-gl.me/abV3X

danwer

Сегодня поговорим о телеграм-мессенджере. Эта тема будет интересна в первую очередь тем, кто устанавливает телегу не из убунтовских репп по причине несвежести версии, а путём скачивания бинарника с офф.сайта телеги. В общем проблема в следующем. В настройках телеги стоит автообновление. Но работает оно как то  странно.  Раньше когда то  вообще не обновлялось автоматом. Сейчас вроде бы и обновляется, но тоже не всегда. Короче,  приходится самому лезть на сайт, скачивать, распаковывать и т.д. и т.п.  Естественно я как добропорядочный лентяй решил избавиться от этих утомительных манипуляций. В результате появился скрипт telegram_update.sh:
#!/bin/bash
                --Обновление telegram--

# Закрытие telegram  на случай если был открыт
killall -s 15 Telegram

cd ~/.local/bin/t
wget https://telegram.org/dl/desktop/linux -O linux.tar.xz &
pid1=$!
while true
  do
  printf "$i\n"
    sleep 0.5
if ! [[ $(ps | grep "$pid1") ]]; then
break
fi
  done | (yad --skip-taskbar --progress --title="Обновление Telegram" --auto-close --no-cancel --pulsate --button=Отмена:35 --progress-text="Идёт скачивание.." --window-icon=/usr/local/icons/app/yad/info.png --geometry=300x70)

tar -xpf linux.tar.xz -C ./ &
pid2=$!
while true
  do
  printf "$i\n"
    sleep 0.5
if ! [[ $(ps | grep "$pid2") ]]; then
break
fi
  done | (yad --skip-taskbar --progress --title="Обновление Telegram" --auto-close --no-cancel --pulsate --button=Отмена:35 --progress-text="Идёт обновление.." --window-icon=/usr/local/icons/app/yad/info.png --geometry=300x70)

# Перемещение обновлённого бинарника Telegram в ~/.local/bin/t/
mkdir ~/.local/bin/t/temp
mv ~/.local/bin/t/Telegram/Telegram ~/.local/bin/t/temp
rm -rf ./Telegram
mv ~/.local/bin/t/temp/Telegram ~/.local/bin/t && rm -rf ./temp
rm -rf ./linux.tar.xz

# Создание симлинка на ~/.local/bin/t/Telegram  в ~/.local/bin/
ln -s ~/.local/bin/t/Telegram ~/.local/bin/Telegram

yad --skip-taskbar --title="" --geometry=200x20 --text=" \n                 Готово!"  --window-icon=/usr/local/icons/app/yad/info.png --button=OK:0

У меня телега лежит в ~/.local/bin/t/ и скрипт там же.  Если надо чтобы лежала где-то в другом месте, то нужно поправить пути в скрипте.

Значок запуска telegram_update.desktop:
[Desktop Entry]
Name=Обновление Telegram
Comment=
Exec=bash -c '~/.local/bin/t/telegram_update.sh'
Type=Application
Categories=Network;
Icon=/usr/local/icons/telegram_update.png
Terminal=false

Работу скрипта иллюстрирует пульсирующий прогресс-бар: