Debian 10 Buster + openbox (установка и настройка)

Содержание скрыть
1. Установка Debian

Данная инструкция составлялась для себя. Предполагает установку debian после минимальной инсталляции (консоль онли) в облегченном варианте — с openbox в качестве менеджера окон, lxpanel в качестве панели рабочего стола и упором на qt-софт. Конфиги, например автозапуск, взяты с рабочей машины или приближены к ним. Инструкция может изменяться и дополняться.

 
 
  1. эти команды выполняются от пользователя
 
 
  1. эти команды выполняются от рута

Установка Debian

Настройка APT

Включение установки рекомендуемых пакетов по-умолчанию, подключение репозиториев бэкпортов и несвободного ПО

 
 
  1. echo 'APT::Install-Recommends "true";' >> /etc/apt/apt.conf.d/60recommends
  2. echo deb http://deb.debian.org/debian buster-backports main > /etc/apt/sources.list.d/backports.list
  3. echo deb http://ftp.debian.org/debian/ buster contrib non-free > /etc/apt/sources.list.d/contrib_nonfree.list

 

Core system

Если установка с debootstrap, то установка базовых утилит запускается командой

 
 
  1. tasksel -task-packages standard

Основная система и софт

Wajig — обертка над apt/aptitude, собрал в себя почти весь разрозненный функционал

 
 
  1. apt update && apt install wajig

Базовые утилиты для командной строки

 
 
  1. wajig install mc curl apt-transport-https firmware-linux-nonfree firmware-linux-free firmware-iwlwifi cifs-utils smbclient vim-nox ntfs-3g autofs dmeventd console-terminus python3-pip
Коротко о пакетах
 
  1. mc - файловый менеджер
  2. curl - иногда используется в сторонних скриптах
  3. apt-transport-https - поддержка репозиториев с https
  4. firmware-* - драйвера
  5. cifs-utils, smbclient - поддержка виндовых шар
  6. vim-nox - текстовый редактор
  7. ntfs-3g - поддержка ntfs
  8. autofs - демон автоматического монтирования
  9. dmeventd - для слежения за LVM (без него не работает автоувеличение снапшотов)
  10. console-terminus - моноширинный шрифт
  11. python3-pip - инсталлятор питоновских скриптов

Openbox

Набор пакетов, устанавливающих минимальное окружение рабочего стола, + конфигураторы

 
 
  1. wajig install sddm openbox openbox-menu obconf-qt lxappearance kde-style-qtcurve-qt4 qt4-qtconfig compton kdialog lxpanel xfonts-terminus network-manager-gnome network-manager-openvpn-gnome

Важные утилиты

 
 
  1. wajig install dbus-x11 udiskie lxpolkit libpam-kwallet5 kde-l10n-ru gdebi p7zip-full p7zip-rar trash-cli
Коротко о пакетах
 
  1. udiskie - для автомонтирования флешек
  2. lxpolkit - система, запрашивающая повышение прав для пользователя
  3. libpam-kwallet5 - для разблокировки хранилки паролей при входе в систему
  4. kde-l10n-ru - локализация пакетов
  5. gdebi - графический установщик локальных пакетов
  6. p7zip-full p7zip-rar - архиваторы

Полезный софт

 
 
  1. wajig install parcellite syncthing-gtk yakuake konsole encfs seahorse
Коротко о пакетах
 
  1. parcellite - менеджер буфера обмена
  2. syncthing-gtk - синхронизация файлов между компами
  3. yakuake, konsole - выпадающая консоль
  4. encfs - шифрование файлов
  5. seahorse - менеджер паролей (для encfs и не только)

soft (other)

 
 
  1. wajig install chromium chromium-l10n smplayer doublecmd-qt libunrar kate krdc libreoffice libreoffice-l10n-ru gaupol mkvtoolnix-gui thunderbird thunderbird-l10n-ru recoll aspell-ru handbrake

Пользовательское окружение

 
 
  1. mkdir ~/.config/openbox/
  2. touch ~/.config/openbox/environment
  3. touch ~/.config/openbox/autostart
  4. chmod +x ~/.config/openbox/autostart

переменные окружения

~/.config/openbox/environment
 
  1. #
  2. # Set system-wide environment variables here for Openbox
  3. # User-specific variables should be placed in $HOME/.config/openbox/environment
  4. #
  5. # To set your language for displaying messages and time/date formats, use the following:
  6. #LANG=en_CA.UTF8
  7. # To set your keyboard layout, you need to modify your X config:
  8. # http://www.google.com/search?q=how+to+set+keyboard+layout+xorg
  9. export PATH=$HOME/bin:$HOME/.local/bin:$PATH
  10. export LANG=ru_RU.UTF-8
  11. export QT_QPA_PLATFORMTHEME="qt5ct"
  12. # export XDG_CURRENT_DESKTOP=KDE

файл автостарта

~/.config/openbox/autostart
 
  1. lxpolkit &
  2. lxpanel &
  3. udiskie &
  4. compton &
  5. nm-applet &
  6. yakuake &
  7. sleep 10 && parcellite &
  8. ss-local -f /tmp/ss-local.pid --fast-open -c ~/.config/shadowsocks/config.json &

Директории по-умолчанию (XDG)

Папки темплейтов, скачиваний и т.д. описаны в файле

~/.config/user-dirs.dirs
 
  1. # This file is written by xdg-user-dirs-update
  2. # If you want to change or add directories, just edit the line you're
  3. # interested in. All local changes will be retained on the next run
  4. # Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
  5. # homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
  6. # absolute path. No other format is supported.
  7. #
  8. XDG_DESKTOP_DIR="$HOME/"
  9. XDG_DOWNLOAD_DIR="$HOME/Downloads"
  10. XDG_TEMPLATES_DIR="$HOME/.Templates"
  11. XDG_PUBLICSHARE_DIR="$HOME/"
  12. XDG_DOCUMENTS_DIR="$HOME/"
  13. XDG_MUSIC_DIR="$HOME/"
  14. XDG_PICTURES_DIR="$HOME/"
  15. XDG_VIDEOS_DIR="$HOME/"

Настройка тем и прочего отображения

Установка

 
 
  1. wajig install lxappearance qt5ct kde-style-qtcurve-qt4 qt4-qtconfig

Утилиты без ярлыков

 
 
  1. qtconfig
 
 
  1. lxappearance

Настройка хоткеев

Установить из локального пакета: obkey

Смена браузера по умолчанию

 
 
  1. update-alternatives --config x-www-browser
  2. xdg-settings set default-web-browser chromium.desktop

Chromium: kde-диалог сохранения

1. Убедиться что установлен kdialog

2. Сменить ярлык запуска хрома на

 
 
  1. env XDG_CURRENT_DESKTOP=KDE /usr/bin/chromium %U

 

xdg-open не работает из хромиума

Проблема появляется после предыдущего шага в результате того, что скрипт xdg-open также начинает считать, что у нас полноценные кеды и пытается использовать для открытия ссылок инструменты, которых у нас нет. Проблема решается комментированием строк в файле /usr/bin/xdg-open:

/usr/bin/xdg-open
 
  1. ...
  2. # KDE)
  3. # DE=kde;
  4. # ;;
  5. ...

Чтобы не ломать системный файл, лучше скопировать его в ~/.local/bin/ и отредактировать уже там

Прочий и опциональный софт

Блокировка экрана (i3lock)

 
 
  1. wajig install i3lock

на хоткей:

 
 
  1. i3lock -c 000000 -p win

Launcher (rofi)

 
 
  1. wajig install rofi

на хоткей:

 
 
  1. rofi -combi-modi window,drun,ssh -theme solarized -font "hack 10" -show combi

Индексатор документов (recoll)

 
 
  1. wajig install recoll aspell-ru
Настройка: строка формата абзаца результатов
 
  1. <div >
  2. <img src='%I' width='32' style='float:left;'>
  3. <p style='margin: 0; font-weight: bold;'                  >%(filename)
  4. <p style='margin: 0; '                        >%L
  5. <p style='margin: 0; font-size: 0.8em; font-style: oblique;'      >%P
  6. <p style='margin: 0; font-size: 0.9em; '                  >%A %K
  7. </div>

Выделенный прокси (Shadowsocks)

https://shadowsocks.org/en/index.html

На сервере

 
 
  1. wajig install shadowsocks-libev
/etc/shadowsocks-libev/config.json
 
  1. {
  2. "server":"192.168.0.100",
  3. "server_port":9668,
  4. "local_port":1080,
  5. "password":"pa$$w0rd",
  6. "timeout":10,
  7. "method":"aes-256-gcm"
  8. }

На клиенте

 
 
  1. wajig install shadowsocks-libev
~/.config/shadowsocks/config.json
 
  1. {
  2. "server":"192.168.1.100",
  3. "server_port":9668,
  4. "local_port":8376,
  5. "password":"pa$$w0rd",
  6. "timeout":10,
  7. "method":"aes-256-gcm"
  8. }

Запуск (добавлено в автозапуск выше)

 
 
  1. ss-local -f /tmp/ss-local.pid --fast-open  -c ~/.config/shadowsocks/config.json

В браузере настраиваем socks5-прокси на адрес 127.0.0.1:8376

Файловый менеджер (Double Commander)

Опционально. Пакет doublecmd-qt из базового репозитория соответствует пакету doublecmd-qt5 из нижеприведенного.

 
 
  1. cd /tmp
  2. echo 'deb http://download.opensuse.org/repositories/home:/Alexx2000/Debian_10/ /' > /etc/apt/sources.list.d/doublecmd.list
  3. wget -nv https://download.opensuse.org/repositories/home:Alexx2000/Debian_10/Release.key -O Release.key
  4. apt-key add - < Release.key
  5. wajig update
  6. wajig install doublecmd-qt5

Nvidia driver

 
 
  1. wajig install nvidia-detect
  2. nvidia-detect
  3. wajig install [nvidia-*-driver] [nvidia-settings-*]

Запустить от юзера nvidia-settings, применить настройки и сохранить xorg.conf как /etc/X11/xorg.conf.d/20-nvidia.conf (при необходимости создать папку)

Python

wxPython

 
 
  1. wajig install dpkg-dev build-essential  libpython3.7-dev freeglut3-dev libgl1-mesa-dev libglu1-mesa-dev libgstreamer-plugins-base1.0-dev libgtk-3-dev libjpeg-dev libnotify-dev libpng-dev libsdl2-dev libsm-dev libtiff-dev libwebkit2gtk-4.0-dev libxtst-dev
  2. pip3 install wxpython

Java 8 + javafx

 
 
  1. cd /tmp/
  2. wget http://debian.opennms.org/dists/opennms-23/main/binary-all/oracle-java8-installer_8u131-1~webupd8~2_all.deb
  3. dpkg -i oracle-java8-installer_8u131-1_webupd8_2_all.deb
  4. update-alternatives --config java

Вычисление ReplayGain (QtGain)

 
 
  1. wajig install flac vorbisgain

Из локальных пакетов: qtgain и mp3gain

Запуск виндовых игр (Lutris)

 
 
  1. dpkg --add-architecture i386
  2. echo "deb http://download.opensuse.org/repositories/home:/strycore/Debian_9.0/ ./" | sudo tee /etc/apt/sources.list.d/lutris.list
  3. cd /tmp/
  4. wget -q https://download.opensuse.org/repositories/home:/strycore/Debian_9.0/Release.key -O- | sudo apt-key add -
  5. wajig update
  6. wajig install lutris wine libpulse0:i386

Шифрование личных файлов (Molch Encfs Manager)

https://moritzmolch.com/apps/mencfsm/index.html

Скриншоты онлайн (puush)

Сервис https://puush.me/ (на текущий момент регистрация новых пользователей отключена)

 
 
  1. aptitude install scrot xclip python3-docopt python3-notify2 dunst

Сохраняем скрипт

puush-linux.py
 
  1. #!/usr/bin/env python3
  2. """puush for linux
  3. Usage:
  4.     puush [-cmd] upload <file>...
  5.     puush [-cmd] (window | desktop | area)
  6.     puush -h | --help
  7. Commands:
  8.     upload          Upload the specified file(s)
  9.     window          Take a screenshot of the current window and upload it
  10.     desktop         Take a screenshot of the entire desktop and upload it
  11.     area            Take a screenshot of a certain area and upload it
  12. Options:
  13.     -c --clipboard  Copy the URL to clipboard additionally to STDOUT
  14.     -m --mute       Mute. Don't play beep.
  15.     -d --debug      Show debug messages.
  16.     -h --help       Show this help
  17. """
  18. import os
  19. import re
  20. import sys
  21. import subprocess as sp
  22. import requests
  23. import docopt
  24. import notify2
  25. APIURL = "https://puush.me/api/up"
  26. VERSION = "1.0"
  27. def upload_file(path, api_key):
  28.     payload = {
  29.         "k": api_key,
  30.         "z": "something"
  31.     }
  32.     files = {
  33.         "f": open(path, "rb")
  34.     }
  35.     r = requests.post(APIURL, data=payload, files=files)
  36.     url = re.search("(?P<url>https?://[^\s,]+)", r.text).group("url")
  37.     return url
  38. def copy_to_clipboard(content):
  39.     with open("/tmp/puushclip", "w") as f:
  40.         f.write(content)
  41.     sp.check_call(["xclip", "-selection", "clipboard", "-i", "/tmp/puushclip"])
  42.     os.remove("/tmp/puushclip")
  43. def main(args):
  44.     if "PUUSH_API_KEY" in os.environ:
  45.         api_key = os.environ["PUUSH_API_KEY"]
  46.     else:
  47.         try:
  48.             with open(os.path.expanduser("~/.config/puush/key"), "r") as f:
  49.                 api_key = f.read().strip()
  50.         except:
  51.             if args["--debug"]:
  52.                 raise
  53.             print("Failed to get api key. Please follow the instructions at https://github.com/KoffeinFlummi/puush-linux .", file=sys.stderr)
  54.             return 1
  55.     files = args["<file>"]
  56.     scrot_options = None
  57.     if args["window"]:
  58.         scrot_options = ["-b", "-u"]
  59.     if args["desktop"]:
  60.         scrot_options = []
  61.     if args["area"]:
  62.         scrot_options = ["-s"]
  63.     if scrot_options is not None:
  64.         try:
  65.             sp.check_call(["scrot"] + scrot_options + ["/tmp/puushscrot.png"])
  66.         except CalledProcessError:
  67.             if args["--debug"]:
  68.                 raise
  69.             print("Failed to take screenshot. Make sure scrot is installed and /tmp/puushscrot.png is writable.", file=sys.stderr)
  70.             return 2
  71.         files = ["/tmp/puushscrot.png"]
  72.     for f in files:
  73.         try:
  74.             url = upload_file(f, api_key)
  75.         except:
  76.             if args["--debug"]:
  77.                 raise
  78.             print("Something went wrong while uploading your file.", file=sys.stderr)
  79.             return 3
  80.         print(url)
  81.         notify2.init('puush')
  82.         notif = notify2.Notification('puush', url)
  83.         notif.show()
  84.         if args["--clipboard"]:
  85.             try:
  86.                 copy_to_clipboard(url)
  87.             except:
  88.                 if args["--debug"]:
  89.                     raise
  90.                 print("Failed to copy to clipboard. Make sure xclip is installed and /tmp/puushclip is writable.", file=sys.stderr)
  91.                 return 4
  92.         if not args["--mute"]:
  93.             try:
  94.                 sp.call(["play", "--no-show-progress", "--null", "--channels", "1", "synth", "0.07", "sine", "500"], stdout=sp.PIPE, stderr=sp.PIPE)
  95.             except:
  96.                 if args["--debug"]:
  97.                     raise
  98.                 pass
  99.     if scrot_options is not None:
  100.         os.remove("/tmp/puushscrot.png")
  101. if __name__ == "__main__":
  102.     args = docopt.docopt(__doc__, version=VERSION)
  103.     sys.exit(main(args))

Сохраняем API-ключ в файл ~/.config/puush/key. На хоткей вешаем команду

 
 
  1. puush-linux.py area -c

Просмотрщик фото и картинок (XnView MP)

 xnviewmp

Мессенджер (Discord)

discord

Прочие приложения

 
 
  1. wajig install antiword libimage-exiftool-perl poppler-utils python-libxslt1 python-libxml2

 

Настройка сервисов

Принтер и система печати

 
 
  1. aptitude install cups system-config-printer
  2. usermod -aG lpadmin qiwichupa
 
 
  1. system-config-printer

Network Bonding

 
 
  1. wajig install ifenslave
  2. ip link add bond0 type bond
/etc/network/interfaces
 
  1. auto bond0
  2. iface bond0 inet static
  3. address 192.168.1.2/24
  4. gateway 192.168.1.254
  5. bond-primapy enp1s0 enp2s0
  6. bond-slaves enp1s0 enp2s0
  7. bond-mode active-backup
  8. bond-miimon 100

Сон и гибернация

Закрытие ноута

Для гибридного сна по закрытию крышки ноута — в файле /etc/systemd/logind.conf

/etc/systemd/logind.conf
 
  1. [login]
  2. ...
  3. HandleLidSwitch=hybrid-sleep
  4. ...

Второй вариант

Будит комп спустя какое-то время после сна и переводит в гибернацию.

Добавить файл

/etc/systemd/system/suspend-sedation.service
 
  1. [Unit]
  2. Description=Hibernate after suspend
  3. Documentation=https://bbs.archlinux.org/viewtopic.php?pid=1420279#p1420279
  4. Documentation=https://bbs.archlinux.org/viewtopic.php?pid=1574125#p1574125
  5. Documentation=https://wiki.archlinux.org/index.php/Power_management
  6. Documentation=http://forums.debian.net/viewtopic.php?f=5&t=129088
  7. Documentation=https://wiki.debian.org/SystemdSuspendSedation
  8. Conflicts=hibernate.target hybrid-sleep.target
  9. Before=sleep.target
  10. StopWhenUnneeded=true
  11. [Service]
  12. Type=oneshot
  13. RemainAfterExit=yes
  14. Environment="ALARM_SEC=10800"
  15. Environment="WAKEALARM=/sys/class/rtc/rtc0/wakealarm"
  16. ExecStart=/usr/sbin/rtcwake --seconds $ALARM_SEC --auto --mode no
  17. ExecStop=/bin/sh -c '\
  18. ALARM=$(cat $WAKEALARM); \
  19. NOW=$(date +%%s); \
  20. if [ -z "$ALARM" ] || [ "$NOW" -ge "$ALARM" ]; then \
  21. echo "suspend-sedation: Woke up - no alarm set. Hibernating..."; \
  22. sleep 10; \
  23. systemctl hibernate; \
  24. else \
  25. echo "suspend-sedation: Woke up before alarm - normal wakeup."; \
  26. /usr/sbin/rtcwake --auto --mode disable; \
  27. fi \
  28. '
  29. [Install]
  30. WantedBy=sleep.target
 
 
  1. systemctl enable  suspend-sedation

 

Локальная почта

 
 
  1. wajig install mutt exim4
  2. dpkg-reconfigure exim4-config
  • local delivery only; not on a network
  • Keep number of DNS-queries minimal — yes
  • mbox format in /var/mail/
  • Split configuration into small files? No
/etc/exim4/conf.d/router/mmm_mail4root
 
  1. ...
  2. data = /var/mail/root
  3. ...

 

/etc/aliases
 
  1. Удалить:
  2. root: user

AUTOFS

Монтирует в точки монтирования при обращении к ним, демонтирует при отсутствии обращения по таймауту

/etc/auto.master
 
  1. ...
  2. # корневая директория для монтирования по првилам из auto.misc
  3. /mnt/shares /etc/auto.misc
  4. ...

 

/etc/auto.misc
 
  1. # пример nfs-шары
  2. public -fstype=nfs,rw,async,soft,udp,nolock 192.168.1.2:/share/MD0_DATA/Public
  3. # пример cifs-шары с авторизацией доменного юзера
  4. psopen -fstype=cifs,rw,noperm,credentials=/etc/domain.cred ://192.168.122.3/open

Файл с доменной учеткой:

/etc/domain.cred
 
  1. username=MyName
  2. password=MyPassw0rd
  3. domain=MYDOMAIN

 

LVM

Мониторинг размера и автоувеличение снапшотов

Установка демона мониторинга размера томов

 
 
  1. wajig install dmeventd

 

/etc/lvm/lvm.conf
 
  1. ...
  2. snapshot_autoextend_threshold = 80
  3. snapshot_autoextend_percent = 20
  4. monitoring = 1
  5. ...

 

Шпаргалка по работе с LVM

LVM: шпаргалка

 

Установка debian на vmware

Apt

 
 
  1. echo APT::Install-Recommends "true"; >> /etc/apt/apt.conf.d/60recommends
  2. echo deb http://deb.debian.org/debian stretch-backports main > /etc/apt/sources.list.d/backports.list
  3. echo deb http://ftp.debian.org/debian/ stretch contrib non-free > /etc/apt/sources.list.d/contrib_nonfree.list
  4. apt install wajig

CLI

 
 
  1. echo '#!/bin/sh' > /etc/rc.local
  2. echo '/usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs -o subtype=vmhgfs-fuse,allow_other' >> /etc/rc.local
  3. echo 'exit 0' >> /etc/rc.local
  4. chmod +x /etc/rc.local
  5. wajig install open-vm-tools vim-nox mc ssh

GUI

 
 
  1. echo '#!/bin/sh' > /etc/rc.local
  2. echo '/usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs -o subtype=vmhgfs-fuse,allow_other' >> /etc/rc.local
  3. echo 'exit 0' >> /etc/rc.local
  4. chmod +x /etc/rc.local
  5. wajig install vim-nox mc ssh sddm openbox openbox-menu obconf-qt compton dar mc autofs cifs-utils smbclient vim lxpanel xterm ntfs-3g udiskie dmeventd curl apt-transport-https firmware-linux-nonfree firmware-linux-free firmware-iwlwifi xfonts-terminus console-terminus yakuake dbus-x11 konsole kde-l10n-ru gmrun gdebi doublecmd-qt p7zip-full p7zip-rar kate chromium chromium-l10n python3-pip open-vm-tools-desktop

 

Python

Установка другой версии

Пререквизиты:

 
 
  1. wajig install build-essential checkinstall cmake dpkg-dev git libbz2-dev libbz2-dev libc6-dev libgdbm-dev liblzma-dev libncursesw5-dev libreadline-dev libsqlite3-dev libsqlite3-dev libsqlite3-dev libxml2-dev libxslt1-dev openssl python-dev python-dev python-pip python-setuptools python-smbus readline-common tk-dev zlib1g-dev zlib1g-dev <strong>libssl-dev</strong>

Установка python 3.4.9

 
 
  1. wajig install libssl1.0-dev #старому питону нужна эта версия
  2. cd /usr/src/
  3. wget https://www.python.org/ftp/python/3.4.9/Python-3.4.9.tgz
  4. tar xzf Python-3.4.9.tgz
  5. cd Python-3.4.9
  6. ./configure --enable-optimizations --enable-shared LDFLAGS=-Wl,-rpath=/usr/local/lib
  7. make
  8. make altinstall
  9. pip3.4 install --upgrade pip

mysqlclient (windows):

https://pypi.org/project/mysqlclient/1.3.6/#files

 
 
  1. pip install mysqlclient==1.3.6

Установка QT4 + PySide

 
 
  1. wajig install qt4-dev-tools qt4-qmake
  2. pip3.4 install pyside

Установка python 3.7.2

 
 
  1. wajig install libffi-dev
  2. cd /usr/src/
  3. wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
  4. tar xzf Python-3.7.2.tgz
  5. cd Python-3.7.2
  6. ./configure --enable-optimizations --enable-shared LDFLAGS=-Wl,-rpath=/usr/local/lib
  7. make
  8. make altinstall
  9. pip3.7 install --upgrade pip # приводит к невозможности установки pyinstaller, откат: pip3.7 install pip==18.1

Установка QT5 + PySide2

 
 
  1. wajig install qttools5-dev qt5-default
  2. pip3.7 install PySide2

 

 
 
  1. cp /usr/share/applications/designer-qt4.desktop ~/.local/share/applications/designer-qt5.desktop
  2. vi ~/.local/share/applications/designer-qt5.desktop #executable - designer

Выбор версии QT

 
 
  1. qtchooser -qt=5

Бинаризаторы

 
 
  1. pip3.7 install pyinstaller

 

0 Комментарий
Inline Feedbacks
View all comments