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

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

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

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

Установка Debian

Настройка APT

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

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

 

Core system

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

 
 
tasksel -task-packages standard

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

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

 
 
apt update && apt install wajig

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

 
 
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

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

 
 
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 dunst

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

 
 
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 - архиваторы

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

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

soft (other)

 
 
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

Настройка Nvidia Optimus

Nvidia Optimus: включить ускорение для всего сеанса на постоянку

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

 
 
mkdir ~/.config/openbox/
touch ~/.config/openbox/environment
touch ~/.config/openbox/autostart
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/"

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

Установка

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

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

 
 
qtconfig
 
 
lxappearance

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

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

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

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

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

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

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

 
 
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)

 
 
wajig install i3lock

на хоткей:

 
 
i3lock -c 000000 -p win

Launcher (rofi)

 
 
wajig install rofi

на хоткей:

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

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

 
 
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/

На сервере

 
 
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. }

На клиенте

 
 
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. }

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

 
 
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 из нижеприведенного.

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

Nvidia driver

 
 
wajig install nvidia-detect
nvidia-detect
wajig install [nvidia-*-driver] [nvidia-settings-*]

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

Python

wxPython

 
 
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
pip3 install wxpython

Oracle Java 17

 
 
cd /tmp
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.deb
apt install ./jdk-17_linux-x64_bin.deb
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17/bin/java 1
update-alternatives --config java

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

 
 
wajig install flac vorbisgain

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

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

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

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

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

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

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

 
 
aptitude install scrot xclip python3-docopt python3-notify2

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

puush-linux.py
 
#!/usr/bin/env python3
"""puush for linux
Usage:
    puush [-cmd] upload <file>...
    puush [-cmd] (window | desktop | area)
    puush -h | --help
Commands:
    upload          Upload the specified file(s)
    window          Take a screenshot of the current window and upload it
    desktop         Take a screenshot of the entire desktop and upload it
    area            Take a screenshot of a certain area and upload it
Options:
    -c --clipboard  Copy the URL to clipboard additionally to STDOUT
    -m --mute       Mute. Don't play beep.
    -d --debug      Show debug messages.
    -h --help       Show this help
"""
import os
import re
import sys
import subprocess as sp
import requests
import docopt
import notify2
APIURL = "https://puush.me/api/up"
VERSION = "1.0"
def upload_file(path, api_key):
    payload = {
        "k": api_key,
        "z": "something"
    }
    files = {
        "f": open(path, "rb")
    }
    r = requests.post(APIURL, data=payload, files=files)
    url = re.search("(?P<url>https?://[^\s,]+)", r.text).group("url")
    return url
def copy_to_clipboard(content):
    with open("/tmp/puushclip", "w") as f:
        f.write(content)
    sp.check_call(["xclip", "-selection", "clipboard", "-i", "/tmp/puushclip"])
    os.remove("/tmp/puushclip")
def main(args):
    if "PUUSH_API_KEY" in os.environ:
        api_key = os.environ["PUUSH_API_KEY"]
    else:
        try:
            with open(os.path.expanduser("~/.config/puush/key"), "r") as f:
                api_key = f.read().strip()
        except:
            if args["--debug"]:
                raise
            print("Failed to get api key. Please follow the instructions at https://github.com/KoffeinFlummi/puush-linux .", file=sys.stderr)
            return 1
    files = args["<file>"]
    scrot_options = None
    if args["window"]:
        scrot_options = ["-b", "-u"]
    if args["desktop"]:
        scrot_options = []
    if args["area"]:
        scrot_options = ["-s"]
    if scrot_options is not None:
        try:
            sp.check_call(["scrot"] + scrot_options + ["/tmp/puushscrot.png"])
        except CalledProcessError:
            if args["--debug"]:
                raise
            print("Failed to take screenshot. Make sure scrot is installed and /tmp/puushscrot.png is writable.", file=sys.stderr)
            return 2
        files = ["/tmp/puushscrot.png"]
    for f in files:
        try:
            url = upload_file(f, api_key)
        except:
            if args["--debug"]:
                raise
            print("Something went wrong while uploading your file.", file=sys.stderr)
            return 3
        print(url)
        notify2.init('puush')
        notif = notify2.Notification('puush', url)
        notif.show()
        if args["--clipboard"]:
            try:
                copy_to_clipboard(url)
            except:
                if args["--debug"]:
                    raise
                print("Failed to copy to clipboard. Make sure xclip is installed and /tmp/puushclip is writable.", file=sys.stderr)
                return 4
        if not args["--mute"]:
            try:
                sp.call(["play", "--no-show-progress", "--null", "--channels", "1", "synth", "0.07", "sine", "500"], stdout=sp.PIPE, stderr=sp.PIPE)
            except:
                if args["--debug"]:
                    raise
                pass
    if scrot_options is not None:
        os.remove("/tmp/puushscrot.png")
if __name__ == "__main__":
    args = docopt.docopt(__doc__, version=VERSION)
    sys.exit(main(args))

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

 
 
puush-linux.py area -c

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

 xnviewmp

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

discord

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

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

 

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

Bluetooth

Просто устанавливаем менеджер

 
 
wajig install blueman

После перезагрузки в трее должен появиться апплет (blueman-applet — самостоятельно прописывается в автозагрузку)

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

 
 
aptitude install cups system-config-printer
usermod -aG lpadmin qiwichupa
 
 
system-config-printer

Network Bonding

 
 
wajig install ifenslave
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
 
 
systemctl enable  suspend-sedation

 

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

 
 
wajig install mutt exim4
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

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

 
 
wajig install autofs  cifs-utils
/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

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

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

 
 
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

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

CLI

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

GUI

 
 
echo '#!/bin/sh' > /etc/rc.local
echo '/usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs -o subtype=vmhgfs-fuse,allow_other' >> /etc/rc.local
echo 'exit 0' >> /etc/rc.local
chmod +x /etc/rc.local
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

 

Отказоустойчивая установка Debian с EFI на зеркало mdadm-рейда

Отказоустойчивая установка Debian с EFI на зеркало mdadm-рейда

Python

Работа с пакетами

Деинсталлятор зависимостей

 
 
pip3 install --user  python3-pip-autoremove

использование:

 
 
pip3-autoremove pkgname

 

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

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

 
 
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 libssl-dev

Установка python 3.4.9

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

mysqlclient (windows):

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

 
 
pip install mysqlclient==1.3.6

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

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

Установка python 3.7.2

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

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

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

 

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

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

 
 
qtchooser -qt=5

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

 
 
pip3.7 install pyinstaller
0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments