| Vectorified Science Blog |

Free Vector Icons

Настройка рабочего стола Linux

Перевод статьи - Linux Desktop Setup

Автор - Dennis Felsing

Источник оригинальной статьи:

https://hookrace.net/blog/linux-desktop-setup/

Мои настройки программного обеспечения были на удивление постоянными в течение последнего десятилетия, после нескольких лет экспериментов с тех пор, как я впервые переключился на Linux в 2006 году. Может быть, интересно оглянуться через 10 лет и посмотреть, что изменилось. Краткий обзор того, что работает, когда я пишу этот пост:

обзор htop

Мотивация 

Мои программные приоритеты в произвольном порядке:

Операционные системы 

12 лет назад я с трудом начал работать с Linux, удалив Windows, вооружившись только установочным компакт-диском  Gentoo Linux и печатным руководством, чтобы получить работающую систему Linux. Это заняло у меня несколько дней компиляции и мастеринга, но в итоге я почувствовал, что многому научился.

С тех пор я не оглядывался назад на Windows, но переключился на  Arch Linux на своем ноутбуке после того, как вентилятор потерпел неудачу из-за постоянной нагрузки при компиляции. Позже я также переключил все остальные мои компьютеры и частные серверы на Arch Linux. В качестве скользящего релиза вы постоянно получаете обновления пакетов, но о самых важных неполадках приятно сообщается в  Arch Linux News.

Однако раздражает то, что Arch Linux удаляет старые модули ядра после его обновления. Обычно я замечаю, что когда я пытаюсь подключить USB-накопитель, ядро ​​не может загрузить соответствующий модуль. Вместо этого вы должны перезагрузиться после каждого обновления ядра. Есть несколько  способов, чтобы обойти проблему, но я не достаточно обеспокоен, чтобы фактически использовать их.

Аналогичные проблемы возникают с другими программами, обычно Firefox, cron или Samba, требующими перезагрузки после обновления, но досадно не предупреждающими вас об этом.  SUSE, которым я пользуюсь на работе, приятно предупреждает о таких случаях.

Для производственных серверов  DDNet я предпочитаю  Debian, а не Arch Linux, так что у меня меньше шансов поломки при каждом обновлении. Для своего брандмауэра и маршрутизатора я использовал  OpenBSD для его чистой системы, документации и отличного  брандмауэра pf, но сейчас мне больше не нужен отдельный маршрутизатор.

Оконный менеджер 

С тех пор как я начал работать с Gentoo, я быстро заметил огромное время компиляции KDE, что сделало его бесполезным для меня. Я искал более минимальные решения и первоначально использовал  Openbox и  Fluxbox. В какой-то момент я запрыгнул на поезд с диспетчером окон, чтобы быть более сосредоточенным на клавиатуре, и подобрал  dwm и  удивительно близко к их первоначальным релизам.

В итоге я остановился на  xmonad благодаря его гибкости, расширяемости и написанию и настройке на чистом  Haskell, отличном функциональном языке программирования. Одним из примеров этого является то, что дома я запускаю один 40-дюймовый экран 4K, но часто делю его на четыре виртуальных экрана, каждый из которых отображает рабочее пространство, на котором автоматически располагаются мои окна. Конечно, у xmonad есть  модуль для этого.

Дзен и  Конки функционируют как достаточно простая строка состояния для меня. Весь мой конки-конфиг выглядит так:

out_to_console yes
update_interval 1
total_run_times 0

TEXT
${downspeed eth0} ${upspeed eth0} | $cpu% ${loadavg 1} ${loadavg 2} ${loadavg 3} $mem/$memmax | ${time %F %T}

И попадает прямо в dzen2 с  conky | dzen2 -fn '-xos4-terminus-medium-r-normal-*-12-*-*-*-*-*-*-*' -bg '#000000' -fg '#ffffff' -p -e '' -x 1000 -w 920 -xs 1 -ta r.

Одна важная особенность для меня - заставить терминал издавать звуковой сигнал, когда работа сделана. Это делается простым добавлением символа \a в переменную PR_TITLEBAR в zsh, которая отображается при выполнении задания. Конечно, я отключаю звуковой сигнал, внося черный список в модуль ядра pcspkr с помощью echo "blacklist pcspkr" > /etc/modprobe.d/nobeep.conf. Вместо этого звук превращается в срочность с помощью параметра urxvt URxvt.urgentOnBell: true. Затем xmonad имеет ловушку срочности, чтобы захватить это, и я могу автоматически сфокусировать текущее срочное окно с помощью комбинации клавиш. В дзен я получаю срочные окна, отображаемые с красивым и ярким #ff0000.

Окончательный результат во всей красе на моем ноутбуке:

Скриншот ноутбука

Я слышал, что  i3 стал довольно популярным в последние годы, но для этого требуется больше ручного выравнивания окон, чем для указания автоматизированных методов.

Я понимаю, что есть также терминальные мультиплексоры, такие как  tmux, но мне все еще требуются несколько графических приложений, поэтому, в конце концов, я никогда не использовал их продуктивно.

Терминальная стойкость 

Для поддержания работы терминалов я использую  dtach, который является функцией отсоединения экрана. Чтобы сделать каждый терминал на моем компьютере отсоединяемым, я написал  небольшой скрипт-обертку. Это означает, что даже если бы мне пришлось перезапустить мой X-сервер, я мог бы поддерживать все свои терминалы в рабочем состоянии, как локальные, так и удаленные.

Оболочка и программирование 

Вместо  bash я использую  zsh в качестве оболочки для огромного количества функций.

Как эмулятор терминала я обнаружил, что  urxvt достаточно прост, поддерживает Unicode и 256 цветов и имеет отличную производительность. Еще одна замечательная особенность - возможность запуска клиента и демона urxvt по отдельности, так что даже большое количество терминалов едва ли занимает какую-либо память (кроме буфера обратной прокрутки).

Есть только один шрифт, который выглядит абсолютно чистым и идеальным для меня:  Terminus. Так как это растровый шрифт, все идеально подходит для пикселов и рендерится очень быстро и при низкой загрузке процессора. Для переключения шрифтов по требованию в каждом терминале с помощью CTRL-WIN-[1-7] my ~ / .Xdefaults содержит:

URxvt.font: -xos4-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*
dzen2.font: -xos4-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*

URxvt.keysym.C-M-1: command:\033]50;-xos4-terminus-medium-r-normal-*-12-*-*-*-*-*-*-*\007
URxvt.keysym.C-M-2: command:\033]50;-xos4-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*\007
URxvt.keysym.C-M-3: command:\033]50;-xos4-terminus-medium-r-normal-*-18-*-*-*-*-*-*-*\007
URxvt.keysym.C-M-4: command:\033]50;-xos4-terminus-medium-r-normal-*-22-*-*-*-*-*-*-*\007
URxvt.keysym.C-M-5: command:\033]50;-xos4-terminus-medium-r-normal-*-24-*-*-*-*-*-*-*\007
URxvt.keysym.C-M-6: command:\033]50;-xos4-terminus-medium-r-normal-*-28-*-*-*-*-*-*-*\007
URxvt.keysym.C-M-7: command:\033]50;-xos4-terminus-medium-r-normal-*-32-*-*-*-*-*-*-*\007

URxvt.keysym.C-M-n: command:\033]10;#ffffff\007\033]11;#000000\007\033]12;#ffffff\007\033]706;#00ffff\007\033]707;#ffff00\007
URxvt.keysym.C-M-b: command:\033]10;#000000\007\033]11;#ffffff\007\033]12;#000000\007\033]706;#0000ff\007\033]707;#ff0000\007

Для программирования и написания я использую  Vim с подсветкой синтаксиса и  ctags для индексации, а также несколько окон терминала с grep, sed и другими обычными подозреваемыми для поиска и манипуляции. Это, вероятно, не на том же уровне комфорта, что и в IDE, но позволяет мне больше автоматизации.

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

Python и  Nim хорошо работают как языки сценариев, где оболочка недостаточно мощная.

Мониторинг системы 

htop отлично подходит для получения краткого обзора того, что программное обеспечение в настоящее время делает.  lm_sensors позволяет контролировать аппаратную температуру, вентиляторы и напряжения.  powertop - отличный маленький инструмент от Intel для экономии электроэнергии.  ncdu позволяет анализировать использование диска в интерактивном режиме.

nmap, iptraf-ng,  tcpdump и  Wireshark являются важными инструментами для анализа сетевых проблем.

Конечно, есть еще много замечательных инструментов.

Почта и синхронизация 

На моем домашнем сервере у меня работает демон  fetchmail для каждого аккаунта электронной почты, который у меня есть. Fetchmail просто получает входящие письма и вызывает  procmail:

#!/bin/sh
for i in /home/deen/.fetchmail/*; do
  FETCHMAILHOME=$i /usr/bin/fetchmail -m 'procmail -d %T' -d 60
done

Конфигурация настолько проста, насколько это возможно, и ждет, пока сервер сообщит нам о новых письмах:

poll imap.1und1.de protocol imap timeout 120 user "[email protected]" password "XXX" folders INBOX keep ssl idle

Моя конфигурация .procmailrc содержит несколько правил для резервного копирования всех писем и сортировки их в правильные каталоги, например, на основе идентификатора списка рассылки или из поля в заголовке письма:

MAILDIR=/home/deen/shared/Maildir
LOGFILE=$HOME/.procmaillog
LOGABSTRACT=no
VERBOSE=off
FORMAIL=/usr/bin/formail
NL="
"

:0wc
* ! ? test -d /media/mailarchive/`date +%Y`
| mkdir -p /media/mailarchive/`date +%Y`

# Make backups of all mail received in format YYYY/YYYY-MM
:0c
/media/mailarchive/`date +%Y`/`date +%Y-%m`

:0
* ^From: .*(.*@.*.kit.edu|.*@.*.uka.de|.*@.*.uni-karlsruhe.de)
$MAILDIR/.uni/

:0
* ^list-Id:.*lists.kit.edu
$MAILDIR/.uni-ml/

[...]

Для отправки писем я использую  msmtp, который также отлично подходит для настройки:

account default
host smtp.1und1.de
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
auth on
from [email protected]
user [email protected]
password XXX

[...]

Но пока электронные письма все еще находятся на сервере. Все мои документы хранятся в каталоге, который я синхронизирую между всеми компьютерами, используя  Unison. Думайте об Unison как о двунаправленном интерактивном  rsync. Мои электронные письма являются частью этого каталога документов, и поэтому они попадают на мои настольные компьютеры.

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

Оттуда я читаю почту с помощью  mutt, используя плагин боковой панели для отображения моих почтовых каталогов. Файл /etc/mailcap необходим для отображения сообщений в незашифрованном виде, содержащих HTML, Word или PDF:

text/html;w3m -I %{charset} -T text/html; copiousoutput
application/msword; antiword %s; copiousoutput
application/pdf; pdftotext -layout /dev/stdin -; copiousoutput

Новости & Коммуникации 

Newsboat - это симпатичный маленький читатель RSS / Atom в терминале. У меня это работает на сервере в сеансе tach с около 150 каналов. Также возможна локальная фильтрация каналов, например:

ignore-article "https://forum.ddnet.tw/feed.php" "title =~ \"Map Testing •\" or title =~ \"Old maps •\" or title =~ \"Map Bugs •\" or title =~ \"Archive •\" or title =~ \"Waiting for mapper •\" or title =~ \"Other mods •\" or title =~ \"Fixes •\""

Я использую  Irssi таким же образом для связи через IRC.

Календарь 

remind, это календарь, который можно использовать из командной строки. Установка новых напоминаний выполняется путем редактирования файлов rem :

# One time events
REM 2019-01-20 +90 Flight to China %b

# Recurring Holidays
REM 1 May +90 Holiday "Tag der Arbeit" %b
REM [trigger(easterdate(year(today()))-2)] +90 Holiday "Karfreitag" %b

# Time Change
REM Nov Sunday 1 --7 +90 Time Change (03:00 -> 02:00) %b
REM Apr Sunday 1 --7 +90 Time Change (02:00 -> 03:00) %b

# Birthdays
FSET birthday(x) "'s " + ord(year(trigdate())-x) + " birthday is %b"
REM 16 Apr +90 MSG Andreas[birthday(1994)]

# Sun
SET $LatDeg 49
SET $LatMin 19
SET $LatSec 49
SET $LongDeg -8
SET $LongMin -40
SET $LongSec -24

MSG Sun from [sunrise(trigdate())] to [sunset(trigdate())]
[...]

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

Я использую два псевдонима для напоминания:

rem -m -b1 -q -g

увидеть список следующих событий в хронологическом порядке и

rem -m -b1 -q -cuc12 -w$(($(tput cols)+1)) | sed -e "s/\f//g" | less

чтобы показать календарь, соответствующий ширине моего терминала:

remcal

Словарь 

rdictcc - малоизвестный инструмент для создания словарей, который использует превосходные файлы словарей из  dict.cc и превращает их в локальную базу данных:

$ rdictcc rasch
====================[ A => B ]====================
rasch:
    - apace
    - brisk [speedy]
    - cursory
    - in a timely manner
    - quick
    - quickly
    - rapid
    - rapidly
    - sharpish  [Br.]  [coll.]
    - speedily
    - speedy
    - swift
    - swiftly
rasch [gehen]:
    - smartly [quickly]
Rasch {n} [Zittergras-Segge]:
    - Alpine grass [Carex brizoides]
    - quaking grass sedge [Carex brizoides]
Rasch {m} [regional] [Putzrasch]:
    - scouring pad
====================[ B => A ]====================
Rasch model:
    - Rasch-Modell {n}

Написание и чтение 

У меня есть простой файл todo, содержащий мои задачи, который в основном всегда открыт в сеансе Vim. Для работы я также использую файл todo как «готовый» файл, чтобы позже я мог проверить, какие задачи я выполнял каждый день.

Для написания документов, писем и презентаций я использую  LaTeX для превосходного набора текста. Простое письмо в немецком формате может быть установлено, например, так:

\documentclass[paper = a4, fromalign = right]{scrlttr2}
\usepackage{german}
\usepackage{eurosym}
\usepackage[utf8]{inputenc}
\setlength{\parskip}{6pt}
\setlength{\parindent}{0pt}

\setkomavar{fromname}{Dennis Felsing}
\setkomavar{fromaddress}{Meine Str. 1\\69181 Leimen}
\setkomavar{subject}{Titel}

\setkomavar*{enclseparator}{Anlagen}

\makeatletter
\@setplength{refvpos}{89mm}
\makeatother

\begin{document}
\begin{letter} {Herr Soundso\\Deine Str. 2\\69121 Heidelberg}
\opening{Sehr geehrter Herr Soundso,}

Sie haben bei mir seit dem Bla Bla Bla.

Ich fordere Sie hiermit zu Bla Bla Bla auf.

\closing{Mit freundlichen Grüßen}

\end{letter}
\end{document}

Другие примеры документов и презентаций можно найти на  моем частном сайте.

Для чтения PDF-файлов  Zathura быстр, имеет Vim-подобные элементы управления и даже поддерживает два разных PDF-интерфейса: Poppler и MuPDF.  Evince, с другой стороны, более полнофункциональный для случаев, когда я сталкиваюсь с документами, которые не нравятся Затуре.

Графическое редактирование 

GIMP и  Inkscape - легкий выбор для редактирования фотографий и интерактивной векторной графики соответственно.

В некоторых случаях  Imagemagick достаточно хорош, и его можно использовать прямо из командной строки, что позволяет автоматизировать редактирование изображений. Аналогично,  Graphviz и  TikZ можно использовать для рисования графиков и других диаграмм.

Просмотр веб-страниц 

В качестве веб-браузера я всегда использовал  Firefox за его расширяемость и низкое использование ресурсов по сравнению с Chrome.

К сожалению, разработка расширения  Pentadactyl прекратилась после того, как Firefox полностью переключился на расширения в стиле Chrome, поэтому в моем браузере больше не выполняются Vim-подобные элементы управления.

Медиаплееры 

mpv с аппаратным декодированием позволяет смотреть видео при 5% загрузке процессора с использованием настроек конфигурации vo=gpu и hwdec=vaapi . audio-channels=2 в mpv, кажется, дает мне более четкое микширование с моими стереодинамиками / наушниками, чем то, что делает PulseAudio по умолчанию. Отличная небольшая особенность выхода с Shift-Q вместо просто Q чтобы сохранить место воспроизведения. При просмотре с кем-то с другим родным языком вы можете использовать --secondary-sid= чтобы показать два субтитра одновременно, основной внизу, дополнительный в верхней части экрана.

Моя беспроводная мышь может быть легко превращена в пульт дистанционного управления с помощью mpv с помощью небольшого ~/.config/mpv/input.conf :

MOUSE_BTN5 run "mixer" "pcm" "-2"
MOUSE_BTN6 run "mixer" "pcm" "+2"
MOUSE_BTN1 cycle sub-visibility
MOUSE_BTN7 add chapter -1
MOUSE_BTN8 add chapter 1

youtube-dl отлично подходит для просмотра видео, размещенного в Интернете, наилучшее качество может быть достигнуто с -f bestvideo+bestaudio/best --all-subs --embed-subs .

Как музыкальный проигрыватель,  MOC давно не разрабатывался, но все же это простой проигрыватель, который воспроизводит все мыслимые форматы, включая самые странные форматы Chiptune. В AUR также есть  патч, добавляющий поддержку PulseAudio. Даже с частотой процессора до 800 МГц MOC едва использует 1-2% одного ядра процессора.

MOC

Моя музыкальная коллекция находится на моем домашнем сервере, так что я могу получить к ней доступ из любого места. Он монтируется с использованием  SSHFS и автомонтирования в /etc/fstab/ :

root@server:/media/media  /mnt/media  fuse.sshfs noauto,x-systemd.automount,idmap=user,IdentityFile=/root/.ssh/id_rsa,allow_other,reconnect 0 0

Кроссплатформенное здание 

Linux отлично подходит для сборки пакетов для любой крупной операционной системы, кроме самой Linux! Вначале я использовал  QEMU для создания старой платформы Debian, Windows и Mac OS X для этих платформ.

В настоящее время я переключился на использование chroot для старого дистрибутива Debian (для максимальной совместимости с Linux),  MinGW для кросс-компиляции для Windows и  OSXCross для кросс-компиляции для Mac OS X.

Сценарий, используемый для  построения DDNet, а также  инструкции по обновлению сборок библиотеки основаны на этом.

Резервные копии 

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

Я написал  rrb (обратное резервное копирование rsync) 10 лет назад, чтобы обернуть rsync, чтобы мне нужно было предоставить права SSH корневого сервера резервного копирования только тем компьютерам, для которых он выполняет резервное копирование. Удивительно, но rrb потребовалось 0 изменений за последние 10 лет, хотя я продолжал использовать его все время.

Резервные копии хранятся прямо в файловой системе. Инкрементные резервные копии реализуются с использованием жестких ссылок ( --link-dest ). Простая  конфигурация определяет, как долго хранятся резервные копии, по умолчанию:

KEEP_RULES=( \
   7  7 \ # One backup a day for the last 7 days
  31  8 \ # 8 more backups for the last month
 365 11 \ # 11 more backups for the last year
1825  4 \ # 4 more backups for the last 5 years
)

Поскольку некоторые из моих компьютеров не имеют статической записи IP / DNS, и я все еще хочу сделать их резервные копии с использованием rrb, я использую для них обратный туннель SSH (в качестве службы systemd):

[Unit]
Description=Reverse SSH Tunnel
After=network.target

[Service]
ExecStart=/usr/bin/ssh -N -R 27276:localhost:22 -o "ExitOnForwardFailure yes" server
KillMode=process
Restart=always

[Install]
WantedBy=multi-user.target

Теперь сервер может связаться с клиентом через ssh -p 27276 localhost во время работы туннеля для резервного копирования или в формате .ssh/config :

Host cr-remote
  HostName localhost
  Port 27276

Говоря о взломах SSH, иногда сервер не легко доступен из-за плохой маршрутизации. В этом случае вы можете направить SSH-соединение через другой сервер, чтобы получить лучшую маршрутизацию, в данном случае через США добраться до моего китайского сервера, который не был надежно доступен из Германии в течение нескольких недель:

Host chn.ddnet.tw
  ProxyCommand ssh -q usa.ddnet.tw nc -q0 chn.ddnet.tw 22
  Port 22

Заключительные замечания 

Спасибо за чтение моей случайной коллекции инструментов. Я, наверное, забыл много программ, которые использую каждый день настолько естественно, что даже не думаю о них больше. Давайте посмотрим, насколько стабильной будет моя настройка программного обеспечения в ближайшие годы. Если у вас есть какие-либо вопросы, не стесняйтесь связаться со мной по адресу  [email protected].