Ъ прозрачность в yeahconsole

Ъ прозрачность yeahconsoleЗахотелось свистелок и перделок
Сначала пара слов про тему и иконки gtk о которых писал с неделю назад.
Я идиот! вот лепишь свои темы да иконки лепишь, а потом находишь то что лежит под носом, а именно те самые Any Color You Like.
Правда они под носом не лежали, а вот после их обнаружения под носом лежала такая же тема gtk (ага, а я свои темы ковырял допиливал), тоже Any Color You Like (но уже GTK 2.x Theme/Style) — простая тема, правим в её gtkrc пару верхних строчек (цвета, размер иконок, etc) и радуемся. Есть ещё такая же тема для metacity, возможно есть и для чего другого. так что рекомендую!
Вобщем я нашел свой идеал, которы и глаза не мозолит, но душу греет...

То что мне захотелось поменять немного своё окружение мои читатели уже догадались (то обои, то иконки и темы), вот дошла очередь и до консоли, т.е. до иксового эмулятора терминала...

Вступление
Расцветка консоли меня всегда устраивала, сам эмулятор терминала тоже устраивает более чем (yeahconsole + GNU Screen, но описанный ниже метод должен работать и с другими эмуляторами терминалов). Оконный менеджер я тоже менять не собираюсь, однако всяких компизов вешать не хочется, xcompmgr вполне хватает для моих нужд - да и работает он с любым wm (даже с ratpoison). Так что решил (как догадливый читатель уже понял по заголовку) сделать прозрачность для выскакивающего по хоткею терминала, а сам он так не умеет — но это же unix-way, и то что не умеет yeahconsole умеет xcompmgr.

Решение
Что удивительно даже в гугл лезть не пришлось, ибо решая проблему о том что бы эта выпадающая консоль была не по верх всех окон был однострочник для получения id окна, которое можно было потом передавать кому угодно(ну почти) для обработки.
id=$(xwininfo -root -tree | grep имя -B 2 | head -1 | perl -p -e 's/^ *(0x.*?) .*$/$1/g')
запомните сей однострочник, пригодится, мне вот уже неоднократно пригодился.

В качестве обработчика был выбран transset — простая утилита которая тупо делает указанное окно прозрачным, естественно уровень прозрачности можно задать, да и окно можно выбрать как кликом мышки так и параметрами командной строки (вот тут id нам и нужен).
В общем yaourt -S transset-df и устанавливаем прозрачность уже полученному id
transset-df  -i $id 0.85 
Не забываем что xcompmgr или что-то его заменяющее должно быть запущено иначе прозрачности не будет). 0.85 это уровень прозрачности(0 - прозрачно целиком, 1 - непрозрачно, с моей расцветкой делать прозрачность больше 0.85 это сделать текст в консоли нечитаемым в большинстве случаев).
Ъ прозрачность yeahconsole
Применение на автомате
Дело в том что скрит просто так в автозагрузку не впихнешь, ибо может не успеть, так что нужен небольшой sleep перед зупуском. Ну а так как всё что в автозагрузке с иксами грузится у меня в одном файле поэтому итоговый скрипт получил вид
(sleep 3 && transset-df  -i $(xwininfo -root -tree | grep yeahconsole -B 2 | head -1 | perl -p -e 's/^ *(0x.*?) .*$/$1/g') 0.9)&
и попал в файл autostart.sh. Циферка 3 это секунды — на моем текущем десктопе сего времени хватает, возможно кому-то и не хватит, так что поиграйтесь с это циферкой...
Хотя можно и без sleep'a повесить на хоткей и когда надо убирать, когда надо включать прозрачность ибо transset-df при первом вызове устанавливает заданную прозрачность, при втором убирает её.

Дополнение
Во время написания поста решил посмотреть а не сбояню ли я, оказалось что бояню, но только частично — нашел способ установки прозрачности с тем же методом получения id но без использования transset(-df) (на ubuntuforums.org, как ни странно — я думал приверженцы ubuntu не любят таких сложных путей), стандартными исковыми методами
# value is between 0 (invisible) and 2^32 (fully opaque)
xprop -id "$id" -f _NET_WM_WINDOW_OPACITY 32c -set _NET_WM_WINDOW_OPACITY 3221225472
Опробуя сей метод, я так и не осилил почеловечески менять уровень прозрачности.

Итог
В общем огламурил я свой десктоп, для тех кто спросит нафига мне эта прозрачность отвечу вразу — yeahconsole чаще всего открыт у меня на весь экран, затмевая собой не только трей с небольшой инфой(не так уж давно появившийся у меня — а то всё в hardstatus screen'а выносить не комильфо), но и всё происходящее в окнах, к прмеру в браузере или ещё где. Так что это носит не столько эстетический характер сколь практический
ixti 10-08-2010
Небольшое дополнение к однострочнику. Я не большой любитель awk тем не менее здесь он мне кажется смотрится на много лучше:

id=$(xwininfo -root -tree | grep имя -B 2 | head -1 | awk '{print $1}')

Или даже вот так (чтоб уж совсем лаконично, но имхо вариант выше чуть читабельнее):

id=$(xwininfo -root -tree | grep имя -B 2 | awk '{print $1; exit}')
muhas 10-08-2010
@ixti, awk использовать логичнее перла это да...
Arton 10-08-2010
Прикручу прозрачность. А так лишняя функция,но может будет удобно
sdfs 10-08-2010
А как это прикрутить к xterm?
muhas 10-08-2010
не менять xterm'у заголовок средствами bash/zsh в самом начале всё остальное так же

transset-df -i $(xwininfo -root -tree | grep xterm -B 2 | head -1 | perl -p -e 's/^ *(0x.*?) .*$/$1/g') 0.9

что бы запускалось сразу создаем для любого xterm создаем алиас/десктоп-файл/хоткей или что там у вас где сначала запускаем xterm а потом transset
sdfs 10-08-2010
не менять xterm'у заголовок средствами bash/zsh

Как это сделать?
muhas 10-08-2010
sdfs запускать скрипт с нужным заголовком,
Всегда Ваш, Капитан Очевидность.

а то что потом заголовок меняется уже пофигу
sdfs 10-08-2010
Не получается
сделал скрипт /home/user/terminal.sh
-----------------------------------
#!/bin/sh

xterm && transset-df --id $(xwininfo -root -tree | grep xterm -B 2 | head -1 | awk '{print $1}')
------------------------------------

Вешаю в опенбоксе на хоткей A-x
Не срабатывает :(
muhas 10-08-2010
----------------------------------
#!/bin/sh

xterm&
sleep 1 && transset-df --id $(xwininfo -root -tree | grep xterm -B 2 | head -1 | perl -p -e 's/^ *(0x.*?) .*$/$1/g') 0.9

------------------------------------
ошибка у тебя. transset запускается только по выходу из xterm (&&)
sleep вставил ибо запускается xterm поозже чем транссет срабатывает(поиграйся со слипом)
sdfs 10-08-2010
xterm && я сразу исправил на xterm & - опечатался
а про слип забыл, оптимально sleep 0.1
спасибо, все работает
sdfs 10-08-2010
если создать 2 скрипта
1. trans_up.sh
------------------------------------
#!/bin/sh

transset-df --inc 0.05 --id $(xwininfo -root -tree | grep xterm -B 2 | head -1 | awk '{print $1}')
--------------------------------------

2. trans_down.sh
---------------------------------------
#!/bin/sh

transset-df --dec 0.05 --id $(xwininfo -root -tree | grep xterm -B 2 | head -1 | awk '{print $1}')
---------------------------------------

и повесить и скажем на alt+колесо мыши, то можно изменять прозрачность последнего открытого окна xterm. Только это действие нужно производить вне окон(на рабочем столе, у меня openbox)

Никто не знает как непосредственно уменьшать/повышать прозрачность окна под курсором?
muhas 10-08-2010
поставь уже какой-нить cairo-compmgr или что-нить более функциональное чем xcompmgr и не мучайся =)
и окна перед курсором хоткеями будут и прочее
sdfs 10-08-2010
Неа, весит многа
всякие gconf'ы тянет
sdfs 10-08-2010
muhas, помоги еще решить проблему

есть скрипт смены обоев
подключаю его в кронтаб на выполнение каждую минуту.
Перезагружаюсь и не работает. Крон в автозагрузке стоит.
Если перезапускаю крон, то все нормально. Что за фигня?
muhas 10-08-2010
возможно не работает по причине неопределения иксов в первый запуск. может что-то вроде echo $(команда смены обоев)
ну иле без крона с иксами стартовать скрипт
while true; do
команда смены обоев
sleep 1m
done
sdfs 10-08-2010
да я уж разобрался.
просто при старте крона еще не известна переменная DISPLAY
вначале скрипта прописал export DISPLAY=:0 и все ok

спасибо за ответы
malen"kaya 10-12-2010
боже мой... прости я чуть мозги себе не сломала... Объясните по русски куда че нажимать чтоб нужная мне страница стала прозрачной? Плиз...
muhas 10-12-2010
запустить композитинг, запустить yeahconsole. после этого запустить transset так как показано в статье
guy 13-05-2013
xwininfo -root -tree | grep yeahconsole -B 2 | head -1 | awk '{system("compton-trans -o 95 -w " $1)}'

современный вариант :)