Пример настройки десктоп-окружения в Arch Linux

7 декабря 2016

Сегодня я расскажу, как настраивал десктоп-окружение в Arch Linux на своем ноутбуке Fujitsu Lifebook E733. Вышло очень похоже на окружение, описанное в рамках более ранней заметки Использование FreeBSD на десктопе, версия 2.0. Поэтому на сей раз я постараюсь сосредоточится именно на специфике Arch Linux, опуская прочие, предположительно уже знакомые читателям, детали. Отмечу, что десктоп-окружение с Arch Linux можно получить и намного проще, установив Manjaro Linux.

Примечание: Установка Arch Linux ранее была описана в статье Как я устанавливал Arch Linux на свой ноутбук.

Разные полезные пакеты

Минимальный набор пакетов, необходимый для десктопа, в моем случае выглядел как-то так:

sudo pacman -S xorg-server xorg-xinit xorg-xinput xorg-xrandr arandr \
  xorg-xsetroot xorg-xev xdotool i3 xfce4-terminal dunst xclip \
  ttf-dejavu ttf-droid xf86-input-synaptics xxkb chromium mplayer \
  smplayer youtube-dl evince gimp gpicview feh openvpn mutt msmtp \
  irssi mumble scrot remmina libvncserver audacity deadbeef pcmanfm \
  transmission-gtk alsa-utils openssh git gcc ctags cmake strace \
  python-pip bash-completion lm_sensors rng-tools dnsutils mtr \
  traceroute htop archey3 pwgen zip unzip p7zip unrar lsof whois \
  libnotify gvfs gvfs-mtp

Примечание: Пакеты gvfs и gvfs-mtp нужны для того, чтобы pcmanfm видел Android-устройства, использующие протокол MTP.

Само собой разумеется, вместо Deadbeef вы можете предпочитать Cmus, а вместо Transmission — RTorrent, тут уже дело вкуса. К тому же, далеко не всем нужна такая экзотика, как Mumble, Audacity или CMake. В общем, в вашем случае список определенно будет несколько отличаться.

Для rng-tools нужно дополнительно выполнить:

sudo systemctl enable rngd
sudo systemctl status rngd

Ранее в заметке Использование PGP/GPG, руководство для нетерпиливых объяснялось, какую проблему решает rng-tools. Установка и настройка оконного менеджера i3 уже не раз рассматривалась в этом блоге, поэтому снова на ней останавливаться я не буду.

Дополнительно стоит установить пакет tff-ms-fonts, доступный в AUR. Работа с AUR ранее подробно описывалась в статье Управление пакетами в Arch Linux с помощью ABS и pacman, более того — на примере этого конкретного пакета.

Настройка беспроводной сети: хардкорный ручной метод

Пакеты, необходимые для работы Wi-Fi:

sudo pacman -S iw wpa_supplicant dialog

Смотрим список доступных беспроводных интерфейсов:

sudo iw dev

Поднимаем интерфейс:

sudo ip link set wlp2s0 up

Ищем доступные точки:

sudo iw dev wlp2s0 scan | less

Создаем примерно такой файл /etc/wpa_supplicant/wpa_supplicant-wlp2s0.conf:

# пример конфига со всеми возможными опциями:
# /etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=/run/wpa_supplicant
update_config=1

network={
  ssid="network_ssid"
  psk="secret"
}

Затем говорим:

sudo systemctl enable wpa_supplicant@wlp2s0
sudo systemctl start wpa_supplicant@wlp2s0
sudo systemctl status wpa_supplicant@wlp2s0

Получение настроек сети по DHCP настраивается путем редактирования файла конфигурации /etc/systemd/network/wireless.network аналогично тому, как ранее это делалось для витой пары (см пост Как я устанавливал Arch Linux на свой ноутбук), только нужно заменить имя интерфейса на wlp2s0.

Говорим:

sudo systemctl restart systemd-networkd

В первом приближении, это все, а подробности можно найти в статье Wireless network configuration на Arch Wiki.

Настройка беспроводной сети: NetworkManager

Описанный выше подход отлично работает, если вы пользуетесь Wi-Fi только дома и на работе. Однако он не особо пригоден, если вы часто используете Wi-Fi в общественных местах, так как там зачастую может даже не быть WPA. В этом случае вам больше подойдет NetworkManager:

sudo pacman -S networkmanager network-manager-applet \
  dhclient networkmanager-openvpn gnome-keyring
sudo systemctl enable NetworkManager
sudo systemctl start NetworkManager

Чтобы NetworkManager не конфликтовал с другими сервисами, скажите:

systemctl --type=service

Найдите в списке все сервисы, делающие что-то с сетью, всякие wpa_supplicant и systemd-networkd, и скажите им stop, а затем disable. Затем дописываем:

exec nm-applet &

… в файле ~/.config/i3/config, чтобы при запуске i3 в трее появлялась иконка NetworkManager. Далее все делаем через нее, используя простой и понятный GUI интерфейс. Единственное, что мне не очень понравилось в nm-applet, это то, что он часто показывает всплывающие сообщения, в том числе при выходе ноутбука из спящего режима. Отключить их можно таким образом:

gsettings set org.gnome.nm-applet \
  disable-disconnected-notifications true
gsettings set org.gnome.nm-applet \
  disable-connected-notifications true

Если же вы не любите GUI, читайте man nmcli и соответствующий раздел Arch Wiki.

Локальный DNS-кэш

При использовании NetworkManager достаточно просто настроить кэширование DNS-ответов. Эта возможность крайне полезна, если DNS-сервер интернет-провайдера тормозит или ответы от него иногда теряются.

Ставим dnsmasq, но убеждаемся, что он выключен:

sudo pacman -S dnsmasq
sudo systemctl disable dnsmasq

Далее в /etc/NetworkManager/NetworkManager.conf пишем:

[main]

dns=dnsmasq

Чтобы увеличить размер кэша (по умолчанию хранится 450 записей), создайте файл /etc/NetworkManager/dnsmasq.d/cache.conf с таким содержимым:

cache-size=10000

Затем говорим:

sudo systemctl restart NetworkManager

Теперь NetworkManager будет автоматически запускать dnsmasq с нужными параметрами и прописывать его в /etc/resolv.conf. Для получения информации о текущем статусе dnsmasq можно сказать:

sudo killall -s USR1 dnsmasq

… и почитать вывод journalctl -r.

Настройка точпада

Точпад работает хорошо, просто нужно установить пакет xf86-input-synaptics, как было описано выше. У меня по умолчанию не заработали левый и правый клик по тапу одним и двумя пальцами соответственно. Это может быть как хорошо, потому что исключает случайные клики при печати текста, так и плохо, потому что клики через специально отведенные места на точпаде довольно шумные и могут беспокоить окружающих людей.

Ситуация исправляется путем создания /etc/X11/xorg.conf.d/70-synaptics.conf:

Section "InputClass"
    Identifier "touchpad"
    Driver "synaptics"
    MatchIsTouchpad "on"
        Option "TapButton1" "1"
        Option "TapButton2" "3"
        Option "TapButton3" "2"
EndSection

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

Куда больше подробностей можно найти в статье Touchpad Synaptics на Arch Wiki.

Регулировка яркости экрана

Регулировка яркости экрана работает из коробки и может быть выполнена подручными средствами:

cat /sys/class/backlight/intel_backlight/max_brightness
echo 4648 > /sys/class/backlight/intel_backlight/brightness

Для автоматизации этих действий есть скрипт acpilight (GitHub, AUR), полностью совместимый с xbacklight:

xbacklight -get
sudo xbacklight -set 50
sudo xbacklight -inc 10
sudo xbacklight -dec 10

При сильном желании путем правки конфига i3 можно повесить эти действия на хоткеи, но я лично пока забил.

Настройка suspend/resume

Все работает из коробки:

sudo systemctl suspend

По умолчанию при закрытии крышки ноутбук уходил в сон. Чтобы это исправить, в /etc/systemd/logind.conf дописываем:

HandleLidSwitch=ignore
HandleLidSwitchDocked=ignore

Затем говорим:

sudo systemctl restart systemd-logind

Только учтите, что последняя команда прибивает иксы.

Настройка звука: ALSA

Звук просто работает. Просмотреть список аудио-устройств можно так:

lspci | grep -i audio
cat /proc/asound/card*/id
aplay -l

Регулировка громкости:

alsamixer

Для изменения звуковой карты, используемой в системе по умолчанию, можно воспользоваться asoundconf (AUR):

asoundconf list
asoundconf set-default-card PCH

На самом деле, этот скрипт просто правит ~/.asoundrc и ~/.asoundrc.asoundconf. Также есть утилита asoundconf-gtk, делающая все то же самое, только через GUI. Удобно.

Настройка звука: PulseAudio

Просто использовать ALSA напрямую иногда неудобно. PulseAudio — это такой уровень абстракции над ALSA и/или OSS. Для нас PulseAudio интрересен главным образом тем, что он позволяет переключать звуковые карты на лету без перезапуска приложений, чего ALSA не умеет. Кроме того, не все программы нормально работают из коробки при отсутствии PulseAudio, например, тот же Cmus.

Дополнение: См также новость Причина прекращения поддержки звуковой системы ALSA в Firefox на opennet.ru.

Установка PulseAudio:

sudo pacman -S pulseaudio pulseaudio-alsa

Запустить / остановить PulseAudio:

pulseaudio --start
pulseaudio --kill

Чтобы PulseAudio увидел все приложения и внешние звуковые карты, их может потребоваться перезапустить и переподключить соответственно. Для автозапуска я прописал PulseAudio в конфиг i3.

Список звуковых карт:

pactl list cards short

Список синков:

pactl list sinks short

Установить синк по умолчанию:

pacmd set-default-sink NAME

Получение общей информации, в том числе sink и source по умолчанию:

pactl info

Изменение громкости синка:

pactl set-sink-volume NAME

Информация о том, какие приложения в какие синки пишут:

pacmd list-sink-inputs

Заставить приложения писать в другой синк:

pactl move-sink-input 1 NAME

Показать список источников (микрофонов):

pactl list sources short

Установить источник по умолчанию:

pactl set-default-source NAME

На Reddit мне подкинули скрипт для быстрого переключения звуковых карт, автоматизирующий все описанные выше действия. Также я установил pavucontrol. С его помощью можно делать mute и unmute, регулировать громкость микрофона, и так далее — все это через удобный GUI.

Виртуализация

В последнее время я предпочитаю вместо LXC или KVM использовать VirtualBox. Помимо прочего, он позволяет запускать любые операционные системы и передавать свои виртуалки пользователям ОС, отличных от Linux. Кроме того, я написал для него собственный скрипт-обертку, использующий утилиту vboxmanage. В итоге получился Vagrant, только на православном Python и делающий все так, как мне это удобно.

При установке VirtualBox я выбрал пакет virtualbox-host-modules-arch (там предлагается несколько вариантов). Для загрузки модулей говорим:

sudo modprobe vboxdrv
sudo modprobe vboxnetadp
sudo modprobe vboxnetflt
sudo modprobe vboxpci

Для автоматизации их загрузки создаем /etc/modules-load.d/virtualbox.conf:

vboxdrv
vboxnetadp
vboxnetflt
vboxpci

Если планируете использовать VRDE, также поставьте пакет virtualbox-ext-vnc.

Фаервол

Включаем iptables:

sudo systemctl enable iptables
sudo systemctl start iptables
sudo systemctl status iptables

Правила берутся из файла /etc/iptables/iptables.rules, рядом с ним есть файл с примерами.

Сохранение правил:

sudo sh -c 'iptables-save > /etc/iptables/iptables.rules'

Загрузка правил:

sudo sh -c 'iptables-restore < /etc/iptables/iptables.rules'

Все остальное вы найдете в посте Настройка фаервола с помощью iptables за пять минут.

Настройка OpenVPN

В сети можно найти разные решения, позволяющие, помимо прочего, правильно обновлять настройки DNS при подключении к VPN. К сожалению, все они оказались довольно неудобными и/или сырыми. Поэтому в итоге я просто написал такой скрипт:

#!/bin/sh

set -e

# uncomment if you are NOT using NetworkManager
# systemctl stop systemd-resolved

mv /etc/resolv.conf /etc/resolv.conf.bak

echo 'nameserver 8.8.8.8' > /etc/resolv.conf
echo 1 > /var/run/openvpn.running # for i3status
openvpn --config client.conf || true
rm /var/run/openvpn.running
mv /etc/resolv.conf.bak /etc/resolv.conf

# uncomment if you are NOT using NetworkManager
# systemctl start systemd-resolved

Скрипт работает просто превосходно и делает в точности то, что мне нужно. Подробности о настройке VPN вы найдете в заметке Установки и настройка OpenVPN в Ubuntu Linux за 5 минут.

Подключение принтера и сканера

Дома у меня принтер HP Deskjet 5743 и сканер HP Scanjet 2400. Со сканером проще всего:

sudo pacman -S xsane

… и сканируем все через xsane. Интерфейс у него немного необычный, но к нему моментально привыкаешь.

Принтер подключается так:

sudo pacman -S cups
# нужно для gtk >= 3.22
sudo pacman -S gtk3-print-backends
# куча драйверов для устройств от HP
sudo pacman -S hplip
# нужно для нормальной работы утилит hp-* из hplip
sudo pacman -S python-pyqt5
# запускаем CUPS
sudo systemctl enable org.cups.cupsd.service
sudo systemctl start org.cups.cupsd.service

Затем идем на http://localhost:631, заходим в Administration → Add Printer, логинимся под пользователем root, и дальше в сущности просто жмем Next, Next, Next.

Больше информации о настройке конкретного принтера в Linux можно найти на сайте OpenPrinting.org. Если же вам нужно подключить сетевой принтер, это делается еще проще через Administration → Find New Printers.

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

lpr path/to/file.png

Однако это не будет работать, если у вас несколько принтеров. Решается проблема путем установки принтера по умолчанию:

lpoptions -d HP_Deskjet_5700

Список доступных принтеров можно посмотреть так:

lpstat -p -d

Для печати файла на заданном принтере используйте команду:

lpr -P HP_Deskjet_5700 path/to/file.png

Подробности, как обычно, в манах и официальной документации.

Дополнение: Пример настройки принтера HP LaserJet Pro P1102, зависящего от проприетарных драйверов, вы найдете в заметке про изготовление печатных плат ЛУТом.

Заключение

Что еще можно добавить? SD-ридер проверил, с ним все нормально. Подсветка клавиатуры просто работает и регулируется обычными хоткеями, точпад включается и выключается при помощи соответствующих Fn-сочетаний. С настройкой bluetooth и что там еще осталось я пока не игрался, так как всем этим либо вообще не пользуюсь, либо пользуюсь крайне редко. Каких-либо глюков в работе системы замечено не было. GitHub-репозиторий со всеми конфигами и скриптами вы найдете здесь.

В итоге была получена система, которая просто работает и настроена в точности так, как мне удобно. Теперь я счастлив.

Дополнение: Также вас может заинтересовать пост Шифрование жесткого диска в Linux при помощи dm-crypt.

Метки: .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.