README.md

    Wallwa - В разработке (WIP)

    Wallwa это утилита командной строки для манипуляций над окнами. Запуск почти любого X11 окна в режим _NET_WM_WINDOW_TYPE_DESKTOP и обратно. Корректно работает пока только под Cinnamon. Статус других DE/WM внизу.

    • Отобразить фото/видео/анимацию в качестве обоев (используется mpv)
    • Воспризвести медиаконтент по ссылке в качестве фона рабочего стола (mpv)
    • Отобразить текстовый вывод произольных CLI приложений (используется urxvt)
    • Отобразить произвольное графическое окно/окна в режирме “обоев”, “виджета”
    • Задать прозначность “фоновым” окнам
    • Менять размер, положение и порядок отображения несколькими способами
      • выделяя размер и область расположения мышкой (через slop)
      • переводя окно в обчный режим и обратно
      • через аргументы командной строки установи позиции и размера (в том числе относительные)
    • Создавать композицию из нескольких фоновых окон если нужно
    • Запускать и закрывать все “фоновые” окна разом с сохранием их размеров и позиций

    screenshot

    ВНИМАНИЕ! WALLWA ЗАПУСКАЕТ КОМАНДЫ КОТОРЫЕ ЕЙ ПЕРЕДАЮТ КАК ЕСТЬ, БУДТЕ АККУРАТНЫ
    

    Зачем

    Например я держу на синеватом фоне рабочего стола, текстовый вывод трёх программ.

    Зависимости

    sudo apt install lua procps mpv slop x11-utils xdotool rxvt-unicode coreutils
    

    Сборка

    Потребуются две вспомогательные утилиты xlower и xwidpid они будут собраны и установлены автоматически через make, так как их нет в репозиториях.

    Зависимости сборки для xlower и xwidpid

    sudo apt install libx11-dev gcc make pkg-config libxres-dev libxres-dev
    

    Получение и сборка xlower, xwidpid

    make
    

    Установка и удаление

    Глобально

    sudo make install
    sudo make uninstall
    

    Локально

    make PREFIX=$HOME/.local install
    make PREFIX=$HOME/.local uninstall
    

    Независимо

    make DESTDIR=$HOME/some_you_dir install
    make DESTDIR=$HOME/some_you_dir uninstall
    

    Использование

    Простейшее использования

    • wallwa https://www.youtube.com/watch?v=YvJxhWcX_VU запуск видеообоев по ссылке
    • wallwa file.mkv запуск видеобоев из файла
    • wallwa "xterm -e htop" запуск “длинной” команды с графическим окном
    • wallwa +htop тоже самое что выше, но в прозрачном терминале
    • wallwa minetest просто запуск окна произвольной программы

    Всему что вы запускаете вы даёте имя, имя начинается с cимвола @ все манипуляции совершаются с его указанием, если имя не указано то используется автоматическое имя @default. wallwa принимет максимум два параметра, первый это имя, второй это ссылка, медиафайл ,имя программы для запуска или одна из нескольких команд манипуляций над ними. Есть команды для манипуляций над всеми окнами разом в таком случае имя указывать ненужно. Типичный пример использования. Если перед именем программы стоит символ + то подразумевается что это программа для терминала например wallwa +htop запустит htop в прозрачном терминале и отобразит как фон рабочего стола эта команда аналочна этой wallwa @default +htop так как имя подставилось автоматически Если wallwa получает ссылку или неисполняемый файл то подразумевается что это обои поэтому они всегда разворачиваются на полный экран, это может перекрыть ранее запущенные окна и для этого нужно либо опустить последнее открытое окно -b либо поднять другие -t

    Простой пример использования.

    • wallwa video.mp4 Запустить видеобобои (можно по ссылке)
    • wallwa 70% Установить прозначность обоев на 70%
    • wallwa @top +htop Запустить htop
    • wallwa @cav +cava Запустить cava
    • wallwa @cav 50% Установить прозначность cava на 50%
    • wallwa @top -g Забрать окно htop в обычный режим, задать размер и положение
    • wallwa @top -s Вернуть окно в режим “обоев”
    • wallwa @top +top Заменить htop на top с сохранением размера и положения
    • wallwa -k “Выключить” видеообои
    • wallwa -l Загрузить из обратно
    • wallwa @cav -m Выбрать расположение и размер для cava выделенем мыши
    • wallwa -pa Приостановить работу всех “фоновых” окон
    • wallwa -ra Продолжить из работу снова
    • wallwa -ka Закрыть всё настроенное выше
    • wallwa -i Получить информацию о сохранённых командах и их статусе
    • wallwa -la Запустить всё снова как было

    Вариаций того что мнжно делать много, можно играться, важно то что после того как всё настроено можно просто разом запускать и закрывать всю композицию окон.

    Более полное описание использования в справке

    Usage: wallwa [URL|FILE|APPLICATION|+APPLICATION]
    
     This utilite execute GUI application or open mediafile
     or execute CLI application in transparent terminal and
     move any this variants to desktop background like wallpaper.
     Working only under X11 Xorg.
    
     Wallwa command line options give maximum 2 arguments
     first afrument is string ID started at '@' symbol it
     wallwa item name, after item can be URL,FILE or executable app
     wallwa use mpv for play mediacontent every time in fullscreen mode
     as wallpaper, wallwa use urxvt terminal in transparent mode for CLI.
    
     If first argument not set, automanicly set and use @default item
    
    Arguments:
    
        -h  --help         Show this help message
        -i  --info         Show items list
        -l  --load         Load selected item
        -la --load-all     Load all items
        -m  --mouse        Select item position and size uses mouse
        -g  --get          Get selected item as normal window
        -ga --get-all      Get all active items as normal window
        -s  --set          Set selected item to background
        -s  --set-all      Set all active items to background
        -t  --top          In background mode move selected item to up
        -t  --top-all      In background mode restack all items in forward range
        -b  --back         In background mode move selected item to down
        -b  --back-all     In background mode restack all items in backward range
        -k  --kill         Kill selected item
        -ka --kill-all     Kill all active items
        -d  --del          Delete selected item and kill
        -da --del-all      Delete all items and kill
        -p  --pause        Pause selected item
        -pa --pause-all    Pause all active items
        -r  --resume       Resume selected item
        -ra --resume-all   Resume all items from "pause"
        -c  --center       Reposition selected item in screen center
        -ca --center-all   Rereposition all items in screen center
        -f  --full         Resize selected item to fullscreen
        -fa --full-all     Resize all items in fullscreen
    
        [FILE]             Open mediafile in mpv
        [URL]              Open mediastream in mpv
        application        Execute any* GUI applications in background mode
        +application       Execute any  CLI applications in transparent terminal
    
        [NUMBER]%                Set opacity for selected item
        [NUMBER]%%               Set opacity for all items
        [NUMBER]x[NUMBER]        Set size for selected item
        [NUMBER]:[NUMBER]        Set pose for selected item
        [NUMBER]x[NUMBER]-center Set item size for selected item
                                 and centred item in screen
        *[NUMBER]x[NUMBER]       Relative change size for selected item
        *[NUMBER]:[NUMBER]       Relative change pose for selected item
    
    In relative mode +[NUMBER] add value, -[NUMBER] sub value, [0] no change
    For example:
         @itemname *+50:0   #move window to left on 50px
         @itemname *-10x+20 #sub in window width size 10px and add 20px height
    
    More examples:
         This example show case when you have live video wallpaper and htop in
         background mode, you have 2 items @default and @wallpaper and manipulate
         this items resize, move, restack, pause, resume, close and open again, you
         can make many @items and manipulate each individually or all of them at once
    
         wallwa +htop             #execute htop in transparent terminal as @default item
         wallwa -m                #resize and repose htop window
         wallwa -k                #kill @default item
         wallwa -l                #load again @default item
         wallwa @wallpaper w.mp4  #play video wallpaper in fullscreen mode
         wallwa @default -t       #raise htop above the wallpaper
         wallwa @wallpaper 50%    #set transparent value for wallpaper
         wallwa -pa               #pause @default and @wallpaper
         wallwa -ra               #resume @default and @wallpaper
         wallwa -ka               #close
         wallwa -la               #run again
         wallwa -da               #delete all items and start playing again :D
    
         If you command for wallwa have multiple words use quotes
         For example you can run another (not urxvt) terminal
    
         wallwa @myhtop "xterm -fg white -bg black -e htop"
    
         Wallwa save size and cood position for item you can
         execute another application in current pose and size item
    
         wallwa @myhtop "xterm -fg white -bg black -e htop"
         wallwa @myhtop "xterm -fg red -bg blue -e htop"
         wallwa @myhtop +htop
         wallwa @myhtop +btop
         wallwa @myhtop "xterm -e top"
    
         Current wallwa implemented as Lua script and uses
         other awesome applications for its work such as
    
         * mpv      for playing any media content
         * urxvt    for transparent terminal for CLI applications
         * ps       for get PIDs
         * slop     for use mouse for repose and resize item window
         * xprop    for set and get window parameters
         * wmctrl   for get WID from PID (no used now)
         * xwidpid  for get WID from PID (used now)
         * xlower   for move window to low stack
         * xdotool  for relative change size and pose
         * xwininfo for information about window visible
         * realpath for give absolute path for files and applications
    
    Notice:
    
         WALLWA EXECUTE PROGRAMS FROM COMMAND LINE, NO RUN DANGER
         COMMANDS, YOU SELF CHECK VALID URL, PLEASE BE CAREFUL WHAT
         COMMANDS YOU PASS TO RUN. This doesn't just apply to any terminal input.
    
         wallwa can make "Bad Window" erros, becouse Xorg async.
         If you see "Bad Window" error try
    
            #reload all items
            wallwa -ka ; #kill all
            wallwa -la ; #load all
    
            #or delete all items
            wallwa -da
    
        *Some GUI applications work uncorrect in background mode, for example
         chromium,firefox,tilix,gnome-terminal and maybe other applications
         not work correctly in background mode or no change state to background
         This windows have multiple WID`s and now correctly spawn in background
         but uncorrect behavior with options -g, -s, -b, -t manipulations.
         If window have single WID all works fine
    
         wallwa is prototype util, maybe reimplemented in future.
    

    На заметку

    Может вызывать ошибку Bad Window, это “нормально” ничего страшного. Манипуляции с окнами через -g/-ga/--get-all, -s/-sa/--set-all могут чуть неверно применять размеры окна, поправлю потом. По хорошему вообще всё переписывать надо…

    Текущие проблемы

    • cinnamon [YES]
    • kde-plasma [NOP]
      • окно мигает при -s,-b и уходит за обои рабочего стола
    • gnome [NOP]
      • окно в фоне, но сохраняет фокус
    • xfce4 [NOP]
      • окно в фоне, но уходит за рабочий стол, если по нему кликнуть
    • mate [???]
      • окно мигает при -s,-b и уходит за обои рабочего стола
    • awesome [???]
    • compiz [???]
    • awesome [???]
    • lxde [???]
    • lxqt [???]
    • openbox [NOP]
      • окно в фоне, но сохраняет фокус
    • dwm [???]
      • окно в фоне, но сохраняет фокус

    Описание

    Скрипт для манипуляций над окнами под X11 в режиме "обоев"

    Конвейеры
    0 успешных
    0 с ошибкой