i3wm плавающее окно не по классу, а по роли

ion, dwm, wmii, awesome, xmonad и другие

Модератор: Модераторы разделов

Ответить
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

i3wm плавающее окно не по классу, а по роли

Сообщение olecya »

Есть в тайлинге i3wm такой формат. Прописываешь в конфиге строчку:

Код: Выделить всё

for_window [class="Stardict"] floating enable
и приложение будет открываться всегда в плавающем окне. Возникла необходимость в скрипте, чтобы чтение локальных html документов открывались в текстовом браузере w3m в плавающем окне именно в конкретной ситуации. Я написала desktop файл.

Код: Выделить всё

cat ~/.local/share/applications/w3m.desktop
[Desktop Entry]
Type=Application
Name=w3m
Comment=w3m text browser
Terminal=false
Exec=gnome-terminal --window --role=w3m -q -- w3m %u
Categories=Command line
Почему так? Если установить Terminal=true, а в Exec оставить только браузер, то в i3-dmenu-desktop запускается отлично и через xgd-open тоже. Но в программе нет и возможно это к лучшему потому что я нашла довольно удобный способ назначить окну запуска программы роль. Следует отметить что опция --class в гномовском терминале не изменяет класс окна оконного менеджера.
Установим утилиту xprop, чтобы определять свойства окна. Нетрудно установить что при запуске терминала класс окна остается дефолтным:

Код: Выделить всё

gnome-terminal --class=W3m
xprop | grep -i 'class'
WM_CLASS(STRING) = "gnome-terminal-server", "Gnome-terminal"
Последнее определение мы обычно и используем в конфиге i3. Дефолтная роль при этом значение не постоянное. Запускаем теперь с опцией роли:

Код: Выделить всё

gnome-terminal --role=w3m
xprop | grep -i 'role'
WM_WINDOW_ROLE(STRING) = "w3m"
Остается только добавить строчку в конфиг i3:

Код: Выделить всё

for_window [window_role="w3m"] floating enable
Ну и конечно ни кто не запрещает сузить выборку, хотя это кажется уже избыточным:

Код: Выделить всё

for_window [class="Gnome-terminal" window_role="w3m"] floating enable
Привожу, чтобы иметь представление о возможности если что.
Ну последнее чтобы через xdg-open открывалось так как нужно, пишу в файл (у него наивысший приоритет в сравнении с /usr/share/applications, ну и просто не стала разбираться с xdg-mime set):

Код: Выделить всё

cat  ~/.local/share/applications/mimeapps.list
[Default Applications]
text/html=w3m.desktop
Теперь если открыть в терминале локальный файл html то получим его в браузере w3m в плавающем окне.
floating_w3m.png
floating_w3m.png (84.76 КБ) 3818 просмотров
Ну и в моей программе работает так как нужно, но это уже дело третье.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: i3wm плавающее окно не по классу, а по роли

Сообщение olecya »

Пришлось еще и здесь добавить:

Код: Выделить всё

cat ~/.config/mimeapps.list
[Default Applications]
text/html=w3m.desktop
Похоже это дело не перспективное, руками конфиги править.
Спасибо сказали:
Аватара пользователя
atmavichara
Сообщения: 3
ОС: manjaro

Re: i3wm плавающее окно не по классу, а по роли

Сообщение atmavichara »

Благодарю сестра за подробности) у меня достаточно много времени уходит на настройку линукса, и постоянно что-то не так, а мои кривые руки не всегда способны настроить как надо.
В общем i3 мне очень понравился, нашол интересный и настроенный конфиг, у него всё здорово (даже в синтаксисе немного разобрался) только вот некоторые окна которые стоит открывать как плавающее окошко, рендерятся всё равно на весь экран. `floating enable` не помогает, то есть окошко всё равно растягивается на весь экран. Подскажешь что где поправить нужно?
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: i3wm плавающее окно не по классу, а по роли

Сообщение olecya »

atmavichara
Хорошо бы глянуть на ваш конфигурационный файл. Но должно все быть элементарно. Например, я хочу открывать словарь всегда в плавающем окне. Делю рабочий стол на два окна. В одном запущен эмулятор терминала, в другом stardict. В терминале ввожу команду:

Shell

xprop WM_CLASS
Вместо стрелочки указателя мыши появляется крестик, который нужно переместить в окно stardict и щелкнуть левой кнопкой мыши. В терминале получу:

Shell

WM_CLASS(STRING) = "stardict", "Stardict"
Для чего это надо? Иногда класс может писаться только с прописной или только со строчной или класс может не совпадать с названием. Например:
WM_CLASS(STRING) = "Navigator", "firefox"
Включаю плавающий режим в конфиге для класса. У меня он находится в директории пользователя /home/$USER/.config/i3/config

Код: Выделить всё

for_window [class="Stardict"] floating enable
Кроме того у меня есть строчка для переключения в плавающий режим и обратно:

Код: Выделить всё

bindsym $mod+space floating toggle
Где $mod это клавиша Alt:

Код: Выделить всё

set $mod Mod1
У вас естественно будет свое сочетание.
Перечитайте конфигурационный файл. У меня сочетание:

Код: Выделить всё

bindsym $mod+Control+r restart
Кроме того у меня словарь появляется на 10 рабочем столе(фактически на 0)

Код: Выделить всё

assign [class="Stardict"] $ws10
Где переменная ws10 определена в общей таблице:

Код: Выделить всё

set $ws1 "  1  "
set $ws2 "  2  "
set $ws3 "  3  "
set $ws4 "  4  "
set $ws5 "  5  "
set $ws6 "  6  "
set $ws7 "  7  "
set $ws8 8:web
set $ws9 9:rss
set $ws10 10:mail
Ну вот как бы и все. При запуске словаря он появляется поверх почтовика который стартует при запуске системы. Если надо окно словаря превратить в тайлинговое, то нажимаю Alt+Spase, назад в плавающее - тоже Alt+Spase. Кроме того в настойках самого словаря я выбрала показывать только значок в трее, так что без особой необходимости это окно не выводится даже при запуске самого словаря.
Спасибо сказали:
Аватара пользователя
atmavichara
Сообщения: 3
ОС: manjaro

Re: i3wm плавающее окно не по классу, а по роли

Сообщение atmavichara »

Благодарю за подробный ответ) Конфиг i3 я взял отсуда https://github.com/Avdushin/GOAPPLE
С переключением в плавающий режим я разобрался, проблема в том что окна в плавающем режиме рендерятся на весь рабочий стол, и я так и не нашел способа это регулировать. В целом для меня это не проблема. Проблема возникает при работе в пайчарме с библиотеками типа ткинтера - создавая приложение с графическим интерфейсом, это окошко ренедерится на весь экран в плавающем режиме.
Добавлено (12:41):
Сейчас хотел поскринить экран и.. работает простое переключение в плавающий режим) Прошу прощения за своё невежество.
Огромное спасибо за уделённое внимание и подробные ответы, немного ликбеза для меня оч полезно!
Спасибо сказали:
Ответить