Раньше сидел на 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
Всем добра!









