Тут опишу что можно сделать, для того чтобы накатить Debian и как ее правильно настроить для работы.
Установка минимальной Debian
Для начала берем последнюю версию установщика Debian отсюда либо сборку с закрытыми прошивками отсюда. Подробнее про установку можно прочесть в официальной инструкции (по поводу закрытых микропрограмм написано в пункте 6.4.1).
Во время установки есть следующие интересные моменты:
- Доступна обычная и экспертная установка. Вторая позволит выбрать конкретные лакали для установки, и не устанавливать загрузчик. Не особо полезно, поэтому я всегда ставлю систему в обычном режиме.
- В меню ввода пароля для
root
ничего не вводим, это установитsudo
и запретит вход в систему из под root. - При разметке диска нужно будет создать 2 раздела, под систему и своп, второй обязателен, даже если у вас большое количество оперативной памяти т.к он нужен для корректной работы системы, подробнее про это тут.
- Если уже установлена windows efi раздел не нужен,
grab2
встанет на efi раздел Windows. - Когда появится пункт меню
Выбор программного беспечения
нужно будет снять все галочки кроме последней —`стандартные системные утилиты
, когда на выходе получится максимально чистый дистрибутив.
После этого грузимся в голую консоль. И логинимся. Интернет работать не будет. Для того чтобы подключится к кабелю нужно вручную получить ip от роутера:
sudo dhclient
Подключится к wifi не выйдет, т.к. для работы с ним нужен дополнительный софт (network-manager
), а для его установки нужен интернет. Так что сначала подключаемся кабелем, потом до устанавливаем софт для вафли.
Теперь я предлагаю перейти на нестабильную ветку репозиториев - SID
, чтобы получить некий аналог rolling релизов. Если вы не хотите использовать сырое ПО, то можете пропустить этот шаг. Я столкнулся с проблемами только 1 раз, когда qtcreator обновился до 8.0.0, это обновление сломало мне сборку проектов. Однако уже на следующий день обновление все исправило.
Для переключения на нестабильную ветку SID
делаем следующее:
sudo nano /etc/apt/sources.list
Заменяем его содержимое на:
deb http://deb.debian.org/debian/ sid main contrib non-free
deb-src http://deb.debian.org/debian/ sid main contrib non-free
Потом необходимо обновить систему:
sudo apt update
sudo apt dist-upgrade
sudo apt autoremove
Некоторые пакеты могут не обновится, тогда нужно решить эту проблему руками, удалив пакет и установив его вручную. К этому методу решения проблемы нужно прибегать с осторожностью т.к. у удаляемого покета может быть куча зависимостей и их удаление может сломать систему, но т.к. выше была установлена самая базовая версия системы проблем быть не должно.
Далее нужно накатить DE (я выбирал для себя BSPWM, не зря она в названии), иксы, терминал и браузер, чтобы было откуда и куда копировать команды:
sudo apt install bspwm xorg kitty firefox htop curl
Далее необходимо добавить шаблоны дефолтных настроек для bspwm и sxhkd, и добавить bspwm в xinitrc:
mkdir -p ~/.config/bspwm/
mkdir -p ~/.config/sxhkd/
cp /usr/share/doc/bspwm/examples/bspwmrc ~/.config/bspwm/
cp /usr/share/doc/bspwm/examples/sxhkdrc ~/.config/sxhkd/
chmod +x ~/.config/bspwm/bspwmrc
cp /etc/X11/xinit/xinitrc ~/.xinitrc
echo "sxhkd &" >> ~/.xinitrc
echo "exec bspwm" >> ~/.xinitrc
Также нужно добавить эмулятор терминала в ~/.config/sxhkd/sxhkdrc
, чтобы получить возможность его запустить:
...
# terminal emulator
super + Return
kitty # <- add you'r terminal
...
Далее запускаем Xserver:
startx
После этого появится черный экран, далее можно запустить терминал комбинацией super+enter
.
Раскладка клавиатуры
Для добавления других раскладок нужно отредактировать файл /etc/default/keyboard
, причем эти изменения будут работать как в иксах, так и в консоли.
XKBMODEL="pc105"
XKBLAYOUT="us, ru"
XKBVARIANT=""
XKBOPTIONS="grp:alt_shift_toggle,terminate:ctrl_alt_bksp"
...
Для примера у меня us
и ru
раскладки, переключение через alt + shift
. Комбинация ctrl + alt + backspace
убьет иксы. Для того чтобы применить изменения, необходимо:
sudo udevadm trigger --subsystem-match=input --action=change
Подробнее можно посмотреть через man keyboard
.
Настройка X-ов и DE
Дальше было бы неплохо разобраться с видеокартой, у меня их 2 nvidia и intel, поэтому придется использовать NVIDIA Optimus. Для начала нужно установить пакет с драйверами, необходимую версию драйверов поможет определить nvidia-detect
, его можно установить из apt. Для меня это nvidia-driver
поэтому я делаю:
sudo apt install nvidia-driver
Во время установки вам скажут, что установлен драйвер nouveau
который конфликтует с тем что мы пытаемся установить. Для решения нужно перезагрузить систему.
sudo reboot now
Для проверки правильности установки драйверов можно запустить nvidia-smi
, что покажет версию драйверов и название карточки.
Современные драйвера не дают явно переключать видеокарту, по умолчанию всегда работает карта intel. Для того чтобы запустить программу с видеокартой nvidia нужно добавить 2 параметра:
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia %command%
Проверить работу можно с помощью этой программы.
Для работы с несколькими мониторами можно использовать GUI программу - arandr.
Boot
В этом моменте можно поменять загрузчик с GRAB2 на что-то более современное, вроде rEFInd нацеленного на работу только с EFI. Сделать это достаточно просто:
sudo apt install refind
# Соглашаемся на автоматическую установку
sudo su
rm -r /boot/efi/EFI/debian/
exit
Далее нужно добавить параметр ядру, для того чтобы логи не затирали окно логина:
sudo su
nano /boot/refind_linux.conf
# Туда пишем
"Default" "ro root=UUID=7bed2127-be1b-49b6-a76f-ef4d7e2ec409 quiet"
"Clean" "ro root=UUID=7bed2127-be1b-49b6-a76f-ef4d7e2ec409"
# Узнать UUID диска можно с помощью
cat /proc/cmdline
Или можно становить кастомную сборку ядра с большей отзывчивостью интерфейса и решённой проблемой с логированием:
curl 'https://liquorix.net/install-liquorix.sh' | sudo bash
Terminal
В реле эмулятора терминала уже выбран kitty. Как shell будем использовать zsh.
sudo apt install zsh git unzip fonts-noto-core
Следующее, что нужно сделать это подобрать основной шрифт. Нужен шрифт с иконками, чтобы его можно было использовать в доке. Я предлагаю использовать что-то отсюда. Для себя я выберу DejaVu Sans Mono Nerd Font
.
mkdir dejavu
cd dejavu
wget https://github.com/ryanoasis/nerd-fonts/releases/download/v2.2.2/DejaVuSansMono.zip
unzip DejaVuSansMono.zip
mkdir ~/.fonts
cp DejaVu*.ttf ~/.fonts
cd .. && rm -r dejavu
Посмотреть какие шрифты есть в системе, и как в них выглядят конкретные символы можно с помощью программы gucharmap
, коды символов Nerd Fonts
лежат тут.
Далее нужно настроить kitty
. Документация находится тут. Для копирования дефолтного конфига нужно нажать ctrl+shift+F2
после чего редактируем ~/.config/kitty/kitty.conf
. Нужно изменить шрифт, отключить звонок, сделать окно прозрачным:
...
font_family DejaVuSansMono Nerd Font
bold_font auto
italic_font auto
bold_italic_font auto
...
enable_audio_bell no
...
background_opacity 0.5
...
Данный терминал поддерживает окна и вкладки. Также перечислю основные горячие клавиши:
Command | Hotkey |
---|---|
New Window | Ctrl+Shift+Enter |
Close Window | Ctrl+Shift+W |
Next Window | Ctrl+Shift+] |
Previous Window | Ctrl+Shift+[ |
New Tab | Ctrl+Shift+T |
Close Tab | Ctrl+Shift+Q |
Next Tab | Ctrl+Shift+Right |
Previous Tab | Ctrl+Shift+Left |
Resize Tabs | Ctrl+Shift+R |
Line Up | Ctrl+Shift+Up |
Line Down | Ctrl+Shift+Down |
!> Менее полезные комбинации
Command | Hotkey |
---|---|
Page Up | Ctrl+Shift+Page_Up |
Page Down | Ctrl+Shift+Page_Down |
Top | Ctrl+Shift+Home |
Bottom | Ctrl+Shift+End |
Command | Hotkey |
---|---|
Copy to Clipboard | Ctrl+Shift+C |
Paste from Clipboard | Ctrl+Shift+V |
Paste from Selection | Ctrl+Shift+S |
Increase Font Size | Ctrl+Shift+Equal |
Decrease Font Size | Ctrl+Shift+Minus |
Toggle Fullscreen | Ctrl+Shift+F11 |
!@
Для zsh
я предлагаю установить Oh my ZsH
:
sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
В процессе на все соглашаемся, далее изменим тему:
nano ~/.zshrc
# меняем параметр
ZSH_THEME="agnoster"
BSPWM
Для коретрой работы WM необходимо до установить некоторое по:
sudo apt install compton lxappearance qt5ct arc-theme qt5-style-kvantum papirus-icon-theme breeze-cursor-theme nitrogen polybar psmisc
compton
- композитный менеджерlxappearance
- выбор темы gtkqt4ct
- выбор темы qtarc-theme
- красивая тема gtkqt5-style-kvantum
- движок для тем qt содержащий в себе arc тему (как в gtk)papirus-icon-theme
- набор неплохих иконокbreeze-cursor-theme
- набор курсоров из KDEnitrogen
- выбор заставкиpolybar
- док, настройка которого будет в сл. пунктеpsmisc
- для работы killall
Для настойки gtk приложений необходимо запустить lxappearance
- выбрать там Arc-Darck
, Papirus-Darck
и Breeze
в разных вкладках. Для настройки qt нужно запустить kvantummanager
и во второй вкладке выбрать KvArcDark
после чего нажать Use this theme
. Далее запускаем qt5ct
и выбираем kvantum-dark
и Papirus-Darck
в разных вкладках. Также для работы тем qt нужно прописать переменную окружения в ~/.profile
:
...
export QT_QPA_PLATFORMTHEME=qt5ct
Для выбора изображения на рабочем столе запускаем nitrogen
.
Для настройки WM под себя необходимо править дефолтные конфиги записанные нами ранее ~/.config/bspwm/bspwmrc
и ~/.config/sxhkd/sxhkdrc
. Более подробно про настройку можно посмотреть тут, тут. Я приведу ниже мои конфиги с комментариями:
#! /bin/sh
pgrep -x sxhkd > /dev/null || sxhkd &
bspc monitor -d I II III IV V VI VII VIII IX X
bspc config border_width 2
bspc config window_gap 6
bspc config split_ratio 0.52
bspc config borderless_monocle true
bspc config gapless_monocle true
# --- my autorun ---
export TERM=screen
compton &
nitrogen --restore &
wmname compiz
~/.config/polybar/vpn_check.sh &
~/.config/bspwm/batt_check.sh &
sleep 2
~/.config/polybar/launch.sh &
Для работы с 2-мя мониторами можно посмотреть тут и тут.
Для sxhkd
я оставил все дефолтное, добавил только клавиши специфичные для моей модели ноутбука, а так-же нужные мне хоткеи. Так-же для того чтобы узнать код клавишы можно использовать xev | grep XL
.
#MY_KEY bind AW17R3 Only
XF86AudioRaiseVolume
pactl set-sink-volume @DEFAULT_SINK@ +2%
XF86AudioLowerVolume
pactl set-sink-volume @DEFAULT_SINK@ -2%
XF86AudioMute
pactl set-sink-mute @DEFAULT_SINK@ toggle
XF86AudioMicMute
pactl set-source-mute @DEFAULT_SOURCE@ toggle
Print
flameshot gui
super + m
xrandr --output eDP-1 --mode 1920x1080 --pos 0x0 --output HDMI-1-3 --mode 1920x1080 --pos 0x0
super + {equal, minus}
echo $((`cat /sys/class/backlight/intel_backlight/brightness` {+,-} 100)) > /sys/class/backlight/intel_backlight/brightness
super + shift + {equal, minus}
echo $((`cat /sys/class/backlight/intel_backlight/brightness` {+,-} 500)) > /sys/class/backlight/intel_backlight/brightness
super + v
/home/zen/.config/sxhkd/vpn.sh
Polybar
Про его настройку можно почитать в wiki. Для его работы нужен скрипт запуска, для этого нужно сделать следующее:
mkdir ~/.config/polybar/
nano ~/.config/polybar/launch.sh
Добавить туда скрипт запуска:
#!/usr/bin/env bash
# Terminate already running bar instances
killall -q polybar
# Wait until the processes have been shut down
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
# Launch mybar
polybar mybar
echo "Bars launched..."
после чего:
chmod +x ~/.config/polybar/launch.sh
Также необходимо создать ~/.config/polybar/config
и добавить в него конфиги для дока.
!> ~/.config/polybar/config
[bar/mybar]
;monitor = ${env:MONITOR:eDP-1}
width = 100%
height = 20
radius = 0.0
fixed-center = false
background = ${colors.background}
foreground = ${colors.foreground}
line-size = 1
border-size = 0
padding-left = 0
padding-right = 0
module-margin = 2
font-0 = NotoSans-Regular:size=10;0
font-1 = DejaVuSansMono Nerd Font:size=10;0
modules-left = bspwm
modules-center = filesystem memory cpu temperature
modules-right = nextcloud_sinc site_check vpn_check vpn wlan_usb wlan eth1 eth2 backlight-acpi pulseaudio battery xkeyboard date
[colors]
background = #50000000
background-alt = #b0000000
foreground = #ffffff
foreground-alt = #c4feff
primary = #00bfff
secondary = #0cf93b
orange = #ef640e
alert = #ff0000
;---------- MODULE -----------------------------------------------
;---------- LEFT -------------------------------------------------
[module/bspwm]
type = internal/bspwm
label-focused = %index%
label-focused-background = ${colors.background-alt}
label-focused-underline= ${colors.primary}
label-focused-padding = 2
label-occupied = %index%
label-occupied-padding = 2
label-urgent = %index%!
label-urgent-background = ${colors.alert}
label-urgent-padding = 2
label-empty = %index%
label-empty-foreground = ${colors.foreground-alt}
label-empty-padding = 2
;---------- CENTER -------------------------------------------------
[module/filesystem]
type = internal/fs
mount-0 = /
label-mounted = %used% / %total%
label-mounted-underline = ${colors.secondary}
[module/memory]
type = internal/memory
interval = 1
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-prefix-underline = ${colors.secondary}
format = <label>
format-underline = ${colors.secondary}
label = %gb_used%
[module/cpu]
type = internal/cpu
interval = 1
format-underline = ${colors.secondary}
format = <ramp-coreload> <label>
label = " %percentage%%"
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-prefix-underline = ${colors.secondary}
ramp-coreload-0 = ▁
ramp-coreload-1 = ▂
ramp-coreload-2 = ▃
ramp-coreload-3 = ▄
ramp-coreload-4 = ▅
ramp-coreload-5 = ▆
ramp-coreload-6 = ▇
ramp-coreload-7 = █
[module/temperature]
type = internal/temperature
interval = 1
thermal-zone = 8
warn-temperature = 70
format = "<ramp> <label>"
format-underline = ${colors.secondary}
label = %temperature-c%
format-warn = "<ramp> <label-warn>"
format-warn-underline = ${colors.alert}
label-warn = %temperature-c%
ramp-0 =
ramp-1 =
ramp-2 =
ramp-3 =
ramp-4 =
ramp-foreground = ${colors.foreground-alt}
;---------- RIGHT --------------------------------------------------
[module/nextcloud_sinc]
type = custom/script
interval = 3600
exec = ~/.config/polybar/nextcloud_sinc.sh
click-left = ~/.config/polybar/nextcloud_sinc.sh
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = ${colors.orange}
[module/site_check]
type = custom/script
interval = 1800
exec = ~/.config/polybar/site_check.sh
click-left = ~/.config/polybar/site_check.sh
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = ${colors.orange}
[module/vpn]
type = custom/script
exec-if = ip l | grep wg | grep -q UP
interval = 3
exec = echo " "
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = ${colors.orange}
[module/vpn_check]
type = custom/script
interval = 1
exec = cat /tmp/vpn_state
click-left = touch /tmp/vpn_check
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = ${colors.orange}
[module/eth1]
type = internal/network
interface = enp59s0
interval = 3
format-connected-underline = ${colors.primary}
format-connected-prefix = " "
format-connected-prefix-foreground = ${colors.foreground-alt}
label-connected = "%local_ip% %upspeed% %downspeed% "
[module/eth2]
type = internal/network
interface = enx98fc84e967a8
interval = 3
format-connected-underline = ${colors.primary}
format-connected-prefix = " "
format-connected-prefix-foreground = ${colors.foreground-alt}
label-connected = "%local_ip% %upspeed% %downspeed% "
[module/wlan]
type = internal/network
interface = wlp60s0
interval = 3
format-connected-underline = ${colors.primary}
format-connected-prefix = " 直 "
format-connected-prefix-foreground = ${colors.foreground-alt}
label-connected = "%signal%% %local_ip% %upspeed% %downspeed% "
[module/wlan_usb]
type = internal/network
interface = wlx98ded01b9620
interval = 3
format-connected-underline = ${colors.primary}
format-connected-prefix = " 直 "
format-connected-prefix-foreground = ${colors.foreground-alt}
label-connected = "%signal%% %local_ip% %upspeed% %downspeed% "
[module/backlight-acpi]
type = internal/backlight
card = intel_backlight
format = <label>
label = %percentage%%
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = ${colors.primary}
[module/pulseaudio]
type = internal/pulseaudio
use-ui-max = true
interval = 5
format-volume = <label-volume>
label-volume = %percentage%%
format-volume-prefix = " "
format-volume-prefix-foreground = ${colors.foreground-alt}
label-volume-foreground = ${root.foreground}
format-volume-underline = ${colors.orange}
label-muted = OFF
label-muted-foreground = ${colors.alert}
format-muted-underline = ${colors.orange}
[module/battery]
type = internal/battery
battery = BAT1
adapter = ACAD
full-at = 100
low-at = 30
format-full = <label-full>
label-full = %percentage%%
format-full-prefix = " "
format-full-prefix-foreground = ${colors.foreground-alt}
format-full-underline = ${self.format-charging-underline}
format-discharging = "<ramp-capacity> <label-discharging>"
label-discharging = %percentage%%
format-discharging-underline = ${self.format-charging-underline}
ramp-capacity-foreground = ${colors.foreground-alt}
ramp-capacity-0 =
ramp-capacity-1 =
ramp-capacity-2 =
ramp-capacity-3 =
ramp-capacity-4 =
ramp-capacity-5 =
ramp-capacity-6 =
ramp-capacity-7 =
ramp-capacity-8 =
ramp-capacity-9 =
format-charging = "<animation-charging> <label-charging>"
label-charging = %percentage%%
format-charging-underline = ${colors.orange}
animation-charging-foreground = ${colors.foreground-alt}
animation-charging-0 =
animation-charging-1 =
animation-charging-2 =
animation-charging-3 =
animation-charging-4 =
animation-charging-5 =
animation-charging-6 =
animation-charging-framerate = 500
format-low = "<animation-low> <label-low>"
label-low = %percentage%%
animation-low-0 =
animation-low-1 =
animation-low-framerate = 500
format-low-underline = ${colors.orange}
animation-low-foreground = ${colors.foreground-alt}
[module/xkeyboard]
type = internal/xkeyboard
blacklist-0 = num lock
blacklist-1 = scroll lock
blacklist-2 = caps lock
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-prefix-underline = ${colors.orange}
label-layout = "%layout% "
label-layout-underline = ${colors.orange}
[module/date]
type = internal/date
label = %time% %date%
time = " %H:%M:%S "
time-alt = " %H:%M:%S"
date-alt = " %d-%m-%Y "
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = ${colors.orange}
!@
Для проверки работы запускаем бар:
~/.config/polybar/launch.sh
После чего в консоли отбразатся ошибки в случае их появления.
Display Manager
В качестве Display Manager я предлагаю использовать Ly - терминальный менеджер входа. Его нужно будет собрать из исходников:
sudo apt install build-essential libpam0g-dev libxcb-xkb-dev
git clone --recurse-submodules https://github.com/fairyglade/ly
cd ly
make
make run # проверить работу
sudo make install installsystemd # установка
sudo systemctl enable ly.service
sudo systemctl disable getty@tty2.service
cd .. && rm -rf ly
Конфиг находится в /etc/ly/config.ini
. Можно включить анимацию на заднем плане, а так все по умолчанию вполне хорошо. Единственное, в менеджере нужно выбрать xinitrc
, а не bspwm
, иначе не будет работать часть функций.
Устройства
Bluetooth
Для работы с BT необходим bluetoothctl
. Рассмотрим пример с контроллером от PS4:
bluetoothctl
[bluetooth]#agent on
[bluetooth]#default-agent
[bluetooth]#power on
[bluetooth]#discoverable on
[bluetooth]#pairable on
[bluetooth]#scan on
# Ждем
[bluetooth]#devices
# Последняя команда покажет устройства и их MAC
# Ищем Wireless Controller и запоминаем MAC
[bluetooth]# scan off
[bluetooth]# pair A4:AE:11:75:75:85 # You'r MAC
# Соглашаемся на авторизацию и Dualshock 4 подключен
[bluetooth]#trust A4:AE:11:75:75:85 # You'r MAC
# Для автоматической авторизации
[bluetooth]#quit
После этого на duashock заработает сенсорная панель как тачпад.
Audio
sudo apt install alsa-utils pulseaudio
Для работы необходимо будет указать входы и выходы по умолчанию:
# Смотрим названия устройств
pacmd list-sources | grep -e 'name:' -e 'index:'
pacmd list-sinks | grep -e 'name:' -e 'index:'
sudo nano /etc/pulse/default.pa
# тут меням устройства по умолчанию на необходимые, для меня это
...
### Make some devices default
set-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo
set-default-source alsa_input.pci-0000_00_1f.3.analog-stereo
....
Для управления аудио можно использовать следующие команды, в том числе в SXHKD
, названия те которые использовали для конфига:
# Номер устройства может меняться, нужно проверять
pactl set-sink-volume @DEFAULT_SINK@ +2% # Увеличение громкости на 2%
pactl set-sink-volume @DEFAULT_SINK@ -2% # Уменьшение громкости на 2%
pactl set-sink-mute @DEFAULT_SINK@ toggle # Включение/отключение выхода
pactl set-source-mute @DEFAULT_SOURCE@ toggle # Включение/отключение входа
Также у меня есть плеер Fiio X5, который я иногда использую в качестве внешней аудио карты. Для автоматического переключения необходимо создать правило udev которое будет срабатывать при подключении или отключении устройства.
- Смотрим события:
sudo udevadm monitor
sudo udevadm monitor --property
-
Создаем правило
/lib/udev/rules.d/85-Fiio-X5.rules
срабатывающее по событиям выше: sudo apt install nalaSUBSYSTEM=="sound", ATTR{id}=="X5", ACTION=="add", RUN+="/usr/bin/systemctl start Fiio-X5.service" ENV{ID_USB_SERIAL}=="FiiO_X5_X5", ACTION=="remove", RUN+="/usr/bin/systemctl start Fiio-X5.service"
-
Udev исполняется от рута, а pulseaudio от нашего пользователя, поэтому мы не можем дергать скрипт на прямую, а создаем сервис
/etc/systemd/system/Fiio-X5.service
:
[Unit]
Description=Fiio X5 III player connect
[Service]
Type=simple
RemainAfterExit=no
ExecStart=/usr/local/bin/Fiio-X5.sh
[Install]
WantedBy=multi-user.target
- Уже сервис дергает скрипт, который подключает плеер, если аудио карта найдена и подключает внутреннюю аудио карту если плеер отключен -
/usr/local/bin/Fiio-X5.sh
:
#!/bin/bash
USER_NAME=$(w -hs | awk -v vt=tty$(fgconsole) '$0 ~ vt {print $1}')
USER_ID=$(id -u "$USER_NAME")
X5_STATUS=$(lsusb | grep -e '2972:0027 FiiO Electronics Technology X5')
export PULSE_SERVER="unix:/run/user/"$USER_ID"/pulse/native"
if [[ $X5_STATUS ]]
then
sudo -u "$USER_NAME" pactl --server "$PULSE_SERVER" set-default-sink alsa_output.usb-FiiO_X5_X5-00.analog-stereo
else
sudo -u "$USER_NAME" pactl --server "$PULSE_SERVER" set-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo
fi
Далее нужно сделать скрипт исполняемым и обновить правила udev вместе с сервисами:
sudo chmod +x /usr/local/bin/Fiio-X5.sh
sudo udevadm control --reload-rules
sudo systemctl daemon-reload
ТАЧПАД
sudo apt install xserver-xorg-input-synaptics
Для настройки нужно редактировать конфиг /usr/share/X11/xorg.conf.d/70-synaptics.conf
. Добавляем свои параметры в первую секцию InputClass
:
Section "InputClass"
Identifier "touchpad catchall"
Driver "synaptics"
MatchIsTouchpad "on"
# Ниже наши параметры
Option "TapButton1" "1"
Option "TapButton2" "2"
Option "TapButton3" "3"
Option "VertEdgeScroll" "on"
Option "VertTwoFingerScroll" "on"
Option "HorizEdgeScroll" "on"
Option "HorizTwoFingerScroll" "on"
Option "CircularScrolling" "on"
Option "CircScrollTrigger" "2"
Option "EmulateTwoFingerMinZ" "40"
Option "EmulateTwoFingerMinW" "8"
Option "CoastingSpeed" "0"
Option "FingerLow" "35"
Option "FingerHigh" "40"
EndSection
Подробнее про настройку тачпада написано тут а пункты меню описаны тут, либо в man
.
Подсветка
Для управления подсветкой нужно записать определенные значения в файл. Однако данный файл по умолчанию не доступен для редактирования, поэтому нужно создать правило udev /etc/udev/rules.d/backlight.rules
:
RUN+="/bin/chgrp video /sys/class/backlight/intel_backlight/brightness"
RUN+="/bin/chmod g+w /sys/class/backlight/intel_backlight/brightness"
Для увеличения или уменьшения яркости можно использовать следующик команды:
echo $((`cat /sys/class/backlight/intel_backlight/brightness` + 100)) > /sys/class/backlight/intel_backlight/brightness
echo $((`cat /sys/class/backlight/intel_backlight/brightness` - 100)) > /sys/class/backlight/intel_backlight/brightness
Батарея
Для работы с батарей я предлагаю использовать простенький скрипт ~/.config/bspwm/batt_check.sh
, который будет показывать уведомления (с помощью dunst) когда заряд ниже определенного уровня:
#!/bin/bash
low_power=20
while [ true ]
do
if (( `cat /sys/class/power_supply/BAT1/capacity` <= $low_power )) \
&& [[ `cat /sys/class/power_supply/BAT1/status` == Discharging ]]
then
notify-send -u critical -i computer-fail "System" "Battery empty."
fi
sleep 30
done
Для работы данного скрипта его нужно добавить в автозагрузку, например в ~/.config/bspwm/bspwmrc
.
Прочий софт и улучшения
VsCode
В основном я использую данный редактор кода в своей работе, для его установки нужно:
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /usr/share/keyrings/microsoft-archive-keyring.gpg
sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt-get update
sudo apt-get install code # or code-insiders
Flameshot
Это удобное приложение для скриншотов с возможностью рисовать поверх изображения.
sudo apt install flameshot
flameshot gui # Для окна скриншота
Rofi
Это программа для отображения меню приложений системы.
sudo apt install rofi
Далее можно установить темы:
git clone https://github.com/lr-tech/rofi-themes-collection.git
cd rofi-themes-collection
mkdir -p ~/.local/share/rofi/themes/
cp themes/* ~/.local/share/rofi/themes/
cd .. && rm -rf rofi-themes-collection
# Выбираем понравившуюся тему в
rofi-theme-selector
# я выбрал Rounded red dark
Запускаем меню с помощью команды:
rofi -show run
И добовляем в ~/.config/sxhkd/sxhkdrc
:
...
# program launcher
super + @space
rofi -show run
...
Ranger
Консольный файловый менеджер который умеет отображать картинки и pdf.
sudo apt install ranger python3-pypillowfight
ranger --copy-config=all
Для отображения картинок нужно поменять конфиг ~/.config/ranger/rc.conf
:
set preview_images true
set preview_images_method kitty
Для того чтобы заработал предпросмотр SVG, нужно установить пакет librsvg2-bin
и изменить стандартное поведение для файла SVG. Для этого нужно отредактировать файл ~/.config/ranger/scope.sh
## SVG
image/svg+xml|image/svg)
rsvg-convert --keep-aspect-ratio --width "${DEFAULT_SIZE%x*}" "${FILE_PATH}" -o "${IMAGE>
&& mv "${IMAGE_CACHE_PATH}.png" "${IMAGE_CACHE_PATH}" \
&& exit 6
exit 1;;
Dunst
Это программа для вывода полностью кастомизированных сообщений. Dunst выступает в роли сервера, собственно он и формирует графический вид сообщения. Notify же клиент, который трегенит отображения сообщения и передает туда данные.
sudo apt-get install dunst libnotify-bin
cp -r /etc/xdg/dunst ~/.config/dunst
Для того чтобы получить сообщение, необходимо просто вызвать notify-send
, например так:
notify-send -u low "System" "Something notise."
notify-send -u normal "System" "Something ended."
notify-send -u critical "System" "Something bad happened."
notify-send -h int:value:50 Test
Скорее всего иконки не отобразились. Для того чтобы все заработало, изменим конфиг ~/.config/dunst/dunstrc
, а за одно и придадим сообщения вид похожий на док.
[global]
monitor = 0
follow = none
### Geometry ###
width = 300
height = 300
origin = top-right
offset = 13x39
scale = 0
notification_limit = 15
### Progress bar ###
progress_bar = true
progress_bar_height = 10
progress_bar_frame_width = 1
progress_bar_min_width = 150
progress_bar_max_width = 280
indicate_hidden = yes
transparency = 0
separator_height = 2
padding = 10
horizontal_padding = 10
text_icon_padding = 10
frame_width = 2
frame_color = "#888888"
separator_color = frame
sort = yes
idle_threshold = 120
### Text ###
font = DejaVuSansMono Nerd 10
line_height = 4
markup = full
format = "<b>%s</b>\n%b"
alignment = left
vertical_alignment = center
show_age_threshold = 60
ellipsize = middle
ignore_newline = no
stack_duplicates = false
hide_duplicate_count = false
show_indicators = yes
### Icons ###
icon_position = left
min_icon_size = 0
max_icon_size = 32
icon_path = /usr/share/icons/Papirus/32x32/status/:/usr/share/icons/Papirus/32x32/devices/:/usr/share/icons/Papirus/32x32/emblems/
### History ###
sticky_history = yes
history_length = 20
### Misc/Advanced ###
browser = /usr/bin/xdg-open
always_run_script = true
title = Dunst
class = Dunst
corner_radius = 10
ignore_dbusclose = false
### Wayland ###
force_xwayland = false
### Legacy
force_xinerama = false
### mouse
mouse_left_click = close_current
mouse_middle_click = do_action, close_current
mouse_right_click = close_all
[experimental]
per_monitor_dpi = false
[urgency_low]
background = "#000000CC"
foreground = "#ffffff"
frame_color = "#00ff0040"
timeout = 2
[urgency_normal]
background = "#000000CC"
foreground = "#ffffff"
timeout = 4
[urgency_critical]
background = "#000000CC"
foreground = "#ffffff"
frame_color = "#ff000090"
timeout = 0
Подробнее про каждый из пунктов можно прочесть в man 5 dunst
. После редактирования конфига необходимо перезапустить сервис.
systemctl restart --user dunst.service
В данном конфиге оспользуется тема иконок Papirus
, которая была установленна вместе с оконным менеджером выше. Для того чтобы отобразить любой значёк из этой темы, достаточно использовать флаг -i
. Изображения будут братся из папок указанных в параметре icon_path
.
notify-send -i encrypted "System" "Something bad happened."
APT -> Nala
Для apt я предлагаю использовать обертку - Nala. Она выводит информацию более красово, а так-же автоматически делает autoremove.
sudo apt install nala
echo "alias sudo='sudo '" >> .zshrc
echo "alias apt='nala'" >> .zshrc
Пободный алиас может быть опасен, если apt используется в каких-то скриптах, так что удалите ее в случае появления каких-то проблем. Первый алиас нужен для того, чтобы проверять слова после sudo на наличие псевданимов.
Veracrypt
Для шифрования личных данных я предлагаю использовать программу Veracrypt. Сначала нужно скачать deb пакет версии для терминала с сайта и установить. Для удобного взаимодействия с программой нужно создать папки для монтирования и разрешить запуск программы от sudo без запроса пароля:
sudo mkdir /media/data /media/doc /media/img
# меняем user на своего
echo "user ALL=(ALL:ALL) NOPASSWD: /bin/veracrypt" | sudo tee -a /etc/sudoers
Далее для удобства использования создадим алиасы:
alias veracrypt_data='echo -n "Password: ";sudo veracrypt -k "" --pim=0 --protect-hidden=no -p "`read -s s;echo $s`" /dev/sda /media/data'
alias veracrypt_doc='echo -n "Password: ";sudo veracrypt -k "" --pim=0 --protect-hidden=no -p "`read -s s;echo $s`" /media/data/doc /media/doc'
alias veracrypt_img='echo -n "Password: ";sudo veracrypt -k "" --pim=0 --protect-hidden=no -p "`read -s s;echo $s`" /media/data/img /media/img'
alias veracrypt_un='echo -n "Unmount all drive.";sudo veracrypt -d'
Дополнительные функции дока
Проверка доступности сайтов
Для того чтобы видеть доступность своих сайтов в сети я предлагаю использовать простенький скрипт и кастомный модуль для polybar
, который уже описан в приведенном конфиге выше. В нем используется скрипт ~/.config/polybar/site_check.sh
:
#!/bin/bash
sites=(zenembed.com work.zenembed.com cloud.zenembed.com git.zenembed.com)
for site in ${sites[@]}
do
if $(ping -c 1 $site | grep -q "1 received, 0% packet loss")
then
echo -en " "
else
echo -en " "
fi
done
echo -en " "
Вместо моих вы можете написать свои адреса.
Синхронизация Next cloud.
В качестве файловой помойки я использую Next cloud. Для синхронизации папки на сервере и на компьютере можно использовать nextcloud-desktop-cmd
. Обернув ее в простой скрипт(~/.config/polybar/nextcloud_sinc.sh
), и добавив еще один виджет на бар, получим простенькое средство синхронизации.
#! /bin/bash
adr=cloud.zenembed.com
login=<your_login>
pass=<your_pass>
if $(nextcloudcmd --path nextcloud ~/nextcloud https://$login:$pass@$adr &> /dev/null)
then
echo -en " "
else
echo -en " "
fi
Еще я устанавливаю в систему:
sudo apt install thunar thunar-\*-plugin smplayer gucharmap photoqt qml-module-qt-labs-platform
thunar
- файловый менеджер из xfce.thunar-\*-plugin
- набор плагинов для ФМ.smplayer
- плеер который может подключить отдельную аудио дорожку.gucharmap
- проверка юникод символовphotoqt
- минималистичный просмотрщик фото,qml-module-qt-labs-platform
недостающая либа для его работы.