LINUX.ORG.RU

i3 c двумя мониторами

 , ,


1

1

Раньше сидел на FVWM и про это есть две темы:
2008 год: FVWM для на ноуте
2020 год: Минимализм на FVWM прошедший через года.

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

Мой текущий вариант использования:

- Есть ноут, который может использоваться отдельно, а может совместно с внешним монитором.
- Учтены три варианта вывода:
  - single — вывод только на экран ноута
  - multi — вывод и на ноут и на внешний монитор
  - ext — вывод только на внешний монитор
- Для всех вариантов вывода написана конфига polybar — есть основная панель и дополнительная (только воркспейсы), в multi — на внешнем мониторе основная, в остальных режимах — основная на работающем выводе.
- Использую 15 рабочих столов, к части из них приписаны некоторые приложения. В случае multi-режима часть столов мигрирует на дополнительный вывод. Ну и в процессе работы можно перемещать воркспейсы между выводами при необходимости.
Старт полибара похоже происходит с какой-то гонкой, иногда запускаются лишние полибары, забил на это — случается редко и исправляется перезагрузкой i3 по хоткею.

С picom так и не справился. Тени — красивы, но какая-то долботня с приложениями, которые их сами рисуют. Например в наутилусе удалось настроить по красоте, а вот хром рисует фигню (есть на третьем скриншоте).

В целом, считаю, что окружение допилено на 90% и может для кого-то представлять интерес.

i3 config: https://drive.google.com/file/d/1VDEdlOCl1gd0oRZGUZMmC-v_oKs2MOR4/view?usp=dr...
.wm: https://drive.google.com/file/d/1SslhlrQcKs6sKlH6TLCDG8DOXlaxiBBh/view?usp=dr...

По ссылкам конфига, обоины, скрипт на i3, тема rofi, модуль на менюхи (rofi-blezz: https://github.com/davatorium/rofi-blezz.git), настроки polybar.

Скрипт на управление рабочими столами:

#!/bin/bash                                                                                                             
                                                                                                                        
INTERNAL="eDP"                                                                                                          
EXTERNAL="HDMI-A-0"                                                                                                     
                                                                                                                        
MAIN_POLY_NAME="init_main"                                                                                              
SUPP_POLY_NAME="init_supp"                                                                                              
                                                                                                                        
INT_POLY_NAME="prep_for_note"                                                                                           
EXT_POLY_NAME="prep_for_ext"                                                                                            
                                                                                                                        
set_prepared_polybar() {                                                                                                
  # Завершить текущие экземпляры polybar                                                                                
  killall -q polybar                                                                                                    
                                                                                                                        
  # Ожидание полного завершения работы процессов                                                                        
  while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done                                                           
                                                                                                                        
  MONITOR=$INTERNAL polybar -c $1/polybar/$INT_POLY_NAME mybar &                                                        
  MONITOR=$EXTERNAL polybar -c $1/polybar/$EXT_POLY_NAME mybar &                                                        
}                                                                                                                       
                                                                                                                        
set_single_mode() {                                                                                                     
  xrandr --output $INTERNAL --auto --primary --pos 0x0 \                                                                
         --output $EXTERNAL --off                                                                                       
                                                                                                                        
  # Главный полибар на ноуте                                                                                                
  cp $1/polybar/$MAIN_POLY_NAME $1/polybar/$INT_POLY_NAME                                                                   
  cp $1/polybar/$SUPP_POLY_NAME $1/polybar/$EXT_POLY_NAME                                                                   
                                                                                                                            
  set_prepared_polybar                                                                                                      
}

set_multi_mode() {                                                                                                          
  xrandr --output $INTERNAL --auto --primary --pos 0x0 \                                                                    
         --output $EXTERNAL --auto --right-of $INTERNAL --scale 1.25x1.25                                                   
  # время мониторам на инициализацию                                                                                        
  sleep 1                                                                                                                   
                                                                                                                            
  # Главный полибар на внешнем мониторе                                                                                 
  cp $1/polybar/$MAIN_POLY_NAME $1/polybar/$EXT_POLY_NAME                                                               
  cp $1/polybar/$SUPP_POLY_NAME $1/polybar/$INT_POLY_NAME                                                               
                                                                                                                        
  set_prepared_polybar                                                                                                  
}                                                                                                                       
                                                                                                                        
set_ext_mode() {                                                                                                        
  xrandr --output $INTERNAL --off \                                                                                     
         --output $EXTERNAL --auto --primary --pos 0x0 --scale 1.25x1.25                                                
  # время мониторам на инициализацию                                                                                    
  sleep 1                                                                                                               
                                                                                                                        
  # Главный полибар на внешнем мониторе                                                                                 
  cp $1/polybar/$MAIN_POLY_NAME $1/polybar/$EXT_POLY_NAME                                                               
  cp $1/polybar/$SUPP_POLY_NAME $1/polybar/$INT_POLY_NAME                                                               
                                                                                                                        
  set_prepared_polybar                                                                                                  
}                                                                                                                       
                                                                                                                        
case "$1" in                                                                                                            
  "p") set_prepared_polybar $2;;                                                                                        
  "s") set_single_mode $2;;                                                                                             
  "m") set_multi_mode $2;;                                                                                              
  "e") set_ext_mode $2;;                                                                                                
esac 

Всем добра!

★★

Проверено: dataman ()
Последнее исправление: dataman (всего исправлений: 4)

Слабовато для 15-летнего опыта.

Коммент не столько к тебе, ТС, сколько к кастомизации как явлению или движению. Если за 15 лет ты не смог сделать хорошо, проблема не в тебе.

kaldeon ★★
()
Последнее исправление: kaldeon (всего исправлений: 2)
Ответ на: комментарий от kaldeon

Не готов представлять целое «движение кастомизаторов», слишком большая ответственность. Ну и 15 лет я всё же не занимался десктопом беспробудно :)

lv ★★
() автор топика

А тебе picom принципиально? Для теней и полупрозрачности использую старый-добрый xcompmgr, всё ок, такого бага отображения контекстного меню нет. Но у меня и не i3, конечно.

Bfgeshka ★★★★★
()
Ответ на: комментарий от err

почему не sway?

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

lv ★★
() автор топика
Ответ на: комментарий от votafak

«я-то думал, ты кастомизатор... а ты банальный дефолтник».

lv ★★
() автор топика
Ответ на: комментарий от Bfgeshka

А тебе picom принципиально?

Не, я в принципе не принципиальный. Увидел, что про xcompmgr пишут, что мёртв, а picom вроде как наследник и продолжатель, вот и взял второй. При этом в дефолтной гномьей иксовой сессии таких проблем с тенями не наблюдал. Но ковырять всё это откровенно лень - может кто-то тут ткнёт в решение. А пока и с такими странными эффектами оно функционально.

lv ★★
() автор топика
Ответ на: комментарий от dataman

Электросамокатчик, наверное.

Мотиватор. Чтобы сильно «проперженный стул не просиживать и не превращаться в жирножопого вырожденца» :)

lv ★★
() автор топика
Ответ на: комментарий от lv

Увидел, что про xcompmgr пишут, что мёртв

Да не мёртв он, просто проект простой и более-менее завершён. Да и последняя версия вышла в 2024, не так уж давно.

Но ковырять всё это откровенно лень - может кто-то тут ткнёт в решение.

Ковырять там нечего особо. Будучи прародителем для picom и compton, он гораздо проще сделан, имхо.

Bfgeshka ★★★★★
()

О косяк увидел. В скрипте в set_prepared_polybar нужно передавать параметр $1, а то волшебства не получится.

lv ★★
() автор топика
Ответ на: комментарий от CrX

А можно пояснительную бригаду?

Есть же мнение, что мужчины с маленьким, покупают большие авто. :)

dataman ★★★★★
()

Косяк с рамкой вокруг контекстного меню в браузере я встречал лет 10 назад. Иксы не меняются, стабильно всё через одно место рисуется.

AleksK ★★★
()
Ответ на: комментарий от papin-aziat

Не, ну так-то да, но нет!

Вот смотри. Когда на тебя с обоины жопастенько-сисястенькая тяночка томно взирает, что это говорит твоему подсознанию? Говорит: «Расслабься, чувак, всё у тебя есть, ты на вершине...».

А тут - конкуренция, мотивация... С подсознанием нужно уметь работать, так-то!

lv ★★
() автор топика
Ответ на: комментарий от AleksK

это picom так настроенный. Нужно убрать тени у контекстных меню, если правильно помню. Когда-то заморачивался, потом бросил. Не стоит оно того.

Jeronimo ★★★
()
Ответ на: комментарий от AleksK

picom это и есть compton

picom is a standalone compositor for Xorg, suitable for use with window managers that do not provide compositing. picom is a fork of compton, which is a fork of xcompmgr-dana, which in turn is a fork of xcompmgr.

В арче одно время был симлинк. Ставишь compton, а устанавливается picom. Конфиг одинаковый.

Jeronimo ★★★
()
Последнее исправление: Jeronimo (всего исправлений: 1)
Ответ на: комментарий от Bfgeshka

xcompmgr

А, кстати, проверил - xcompmgr работает по теням корректно с менюхами и прочим. Тайтл не подтеняется как прежде, ну да это фигня - лучше корректно, хоть и без доп. красивостей. Ну а там может и руки дойдут в picocom прописать все нужные окошки.

lv ★★
() автор топика

С обоев проорал, а вообще очень даже ничего, миленько выглядит. Правда я не понимаю белых терминалов, как по мне штука красивая, но вырвиглазная.

daniyal
()
Ответ на: комментарий от mamina_radost

А на что вас мотивирует потный накачанный турок?

Не на поездку в Турцию, нет :) На силовые три раза в неделю и на бег по дорожке.

lv ★★
() автор топика
Последнее исправление: lv (всего исправлений: 1)
Ответ на: комментарий от daniyal

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

Как красивое может быть вырвиглазным? Речь о том, что по глазам светом бъёт? Ну так это же яркость монитора подстраиваешь под окружающую, чтобы вровень было, и вперёд. Или в чём вырвиглазие?

lv ★★
() автор топика

Спасибо.

В 2020 году делал себе десктоп на Lenovo X201i 2010 года ноутбук, остановился на i3.

Но в 2026 году народ уже на sway мигрирует.

Nurmukh ★★★★
()
Ответ на: комментарий от Bfgeshka

Давно не было тиринга, даже подумал, что это зло само исчезло. Закоментировал строку автостарта picom. Но нет.
Из опыта никакие «TearFree», xcompmgr в моем случае от него не лечат.

Поэтому для i3-wm picom, для xfce4 родной xfwm4

dmitry237 ★★★★★
()
Ответ на: комментарий от lv

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

daniyal
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.