Alt Linux - Мои заметки

Исправление таймаута прошивки Bluetooth на Intel AX200 в Linux

Полное руководство по решению проблемы команды 0xfc05 timeout для Intel AX200 Bluetooth на Linux 6.12+. Проверено на ALT Linux Gnome, Ubuntu, Debian и Fedora. Актуально на апрель 2026 года.

Описание проблемы

После обновления ядра или свежей установки Linux на компьютере с адаптером Intel AX200 Bluetooth перестает работать. В логах ядра видны ошибки:

Bluetooth: hci0: command 0xfc05 tx timeout
Bluetooth: hci0: Reading Intel version command failed (-110)

Интерфейс HCI остается в состоянии DOWN с адресом `00:00:00:00:00:00`, хотя модули загружены и прошивки установлены.

Почему это происходит?

Начиная с ядра 6.12.x, изменилась логика инициализации Intel Bluetooth адаптеров. Стандартные параметры модуля `btusb`, которые работали на 6.11 и ниже, больше не совместимы с новыми версиями. Требуются специальные флаги для предотвращения таймаутов при загрузке прошивки.

Решение очень простое — нужно изменить параметры модуля в файле конфигурации.

Быстрое решение (30 секунд)

Если вы спешите, выполните эти две команды:

sudo tee /etc/modprobe.d/btusb.conf << 'EOF'
options btusb disable_scofix=Y
options btusb reset=Y
options btusb max_isoc_frames=4
EOF

sudo reboot

После перезагрузки откройте Параметры → Bluetooth и включите выключатель.

Если это не помогло: Прочитайте раздел «Полное решение» ниже.

Полное решение (пошаговое руководство)

Шаг 1: Диагностика

Сначала убедимся, что проблема именно в этом:

# Проверить наличие адаптера
lsusb | grep -i intel

# Проверить статус HCI
hciconfig -a

# Проверить логи ядра на таймауты
dmesg | grep -i "bluetooth\|btusb" | grep -E "timeout|failed"

Если видите `0xfc05 tx timeout` — это подтверждает нашу проблему.

Шаг 2: Остановка Bluetooth

sudo service bluetooth stop
sudo killall -9 bluetoothd 2>/dev/null || true
sudo modprobe -r btusb 2>/dev/null || true
sudo modprobe -r bluetooth 2>/dev/null || true
sleep 2

Шаг 3: Создание конфигурации

Это ключевой шаг. Создаем файл с параметрами для модуля `btusb`:

sudo tee /etc/modprobe.d/btusb.conf << 'EOF'
# Intel AX200 Bluetooth Fix для Linux 6.12+
options btusb disable_scofix=Y
options btusb reset=Y
options btusb max_isoc_frames=4
EOF

sudo tee /etc/modprobe.d/bluetooth.conf << 'EOF'
# Общие параметры для стабильной работы Bluetooth
options bluetooth disable_esco=Y
options bluetooth enable_hs=Y
EOF

Шаг 4: Загрузка модулей заново

sudo modprobe bluetooth
sleep 1
sudo modprobe btusb
sleep 2

Шаг 5: Запуск Bluetooth сервиса

sudo service bluetooth start

Шаг 6: Проверка результата

hciconfig -a

Должны увидеть:

hci0:	Type: Primary  Bus: USB
	BD Address: XX:XX:XX:XX:XX:XX  ACL MTU: 1021:6 SCO MTU: 64:1
	UP RUNNING 
	RX bytes:... acl:0 sco:0 events:... errors:0
	TX bytes:... acl:0 sco:0 commands:... errors:0

Ключевые признаки успеха:

  • BD Address содержит реальный адрес (не 00:00:00:00:00:00)
  • Статус UP RUNNING (а не DOWN)
  • RX/TX bytes содержат числа больше нуля
  • Нет ошибок в логах

Шаг 7: Перезагрузка (рекомендуется)

sudo reboot

После перезагрузки откройте Параметры → Bluetooth и включите Bluetooth.

Автоматическое решение

Если вы предпочитаете автоматизацию, используйте этот скрипт:

#!/bin/bash
sudo service bluetooth stop
sudo killall -9 bluetoothd 2>/dev/null || true
sudo modprobe -r btusb 2>/dev/null || true
sudo modprobe -r bluetooth 2>/dev/null || true
sleep 2

sudo tee /etc/modprobe.d/btusb.conf << 'EOF'
options btusb disable_scofix=Y
options btusb reset=Y
options btusb max_isoc_frames=4
EOF

sudo tee /etc/modprobe.d/bluetooth.conf << 'EOF'
options bluetooth disable_esco=Y
options bluetooth enable_hs=Y
EOF

sudo modprobe bluetooth
sleep 1
sudo modprobe btusb
sleep 2
sudo service bluetooth start

echo "✅ Bluetooth восстановлен!"
hciconfig -a

Сохраните как `bluetooth_fix.sh` и запустите:

chmod +x bluetooth_fix.sh
sudo bash bluetooth_fix.sh

Объяснение параметров

Параметр Значение Что делает
disable_scofix=Y Y/N Отключает старый способ обработки SCO пакетов. Нужен для совместимости с новыми ядрами
reset=Y Y/N Заставляет адаптер перезагружаться при инициализации. Помогает избежать таймаутов
max_isoc_frames=4 1-N Ограничивает размер изохронных фреймов. Предотвращает перегруз при передаче данных
disable_esco=Y Y/N Отключает eSCO (улучшенный SCO). Повышает совместимость со старыми устройствами
enable_hs=Y Y/N Включает высокоскоростной режим. Улучшает пропускную способность

Проблемы и решения

Проблема: «command 0xfc05 tx timeout» в логах остается

Возможные причины: Конфиги не применились, прошивки повреждены или проблема на уровне BIOS/UEFI.

Решение:

# 1. Убедитесь, что конфиги созданы
cat /etc/modprobe.d/btusb.conf

# 2. Проверьте, что прошивки целы
ls -lh /lib/firmware/intel/ibt-20-1-3.sfi*

# 3. Если прошивки в .xz (сжатые) - распакуйте
sudo xz -d /lib/firmware/intel/ibt-20-1-3.sfi.xz 2>/dev/null || true

# 4. Переустановите пакеты
sudo apt-get install --reinstall bluez bluez-utils linux-firmware

# 5. Перезагрузитесь
sudo reboot

Проблема: HCI интерфейс не обнаруживается

Решение:

# Проверить, видит ли система устройство
lsusb | grep 8087

# Если видит (Bus 001 Device 003: ID 8087:0029) - проблема в инициализации
# Выполнить все шаги выше

# Если НЕ видит - проблема в BIOS
# Перезагрузитесь в BIOS (обычно F2 или Del при загрузке)
# Найдите "Integrated Peripherals" или "Onboard Devices"
# Убедитесь, что Bluetooth включен

Проблема: Bluetooth часто отключается

Решение:

# Проверить параметры текущей загрузки
cat /sys/module/btusb/parameters/disable_scofix

# Если нужно увеличить стабильность - измените:
sudo tee /etc/modprobe.d/btusb.conf << 'EOF'
options btusb disable_scofix=Y
options btusb reset=Y
options btusb max_isoc_frames=8
EOF

sudo reboot

Проверка успешности

echo "=== ДИАГНОСТИКА BLUETOOTH ===" && \
echo "HCI статус:" && \
hciconfig -a && \
echo "" && \
echo "RFKILL статус:" && \
rfkill list bluetooth && \
echo "" && \
echo "Последние логи:" && \
dmesg | grep -i bluetooth | tail -5

Успех, если видите:

  • `hci0: Type: Primary Bus: USB ... UP RUNNING`
  • `rfkill list bluetooth` показывает `Unblocked`
  • Последние логи без ошибок о таймаутах

Совместимость

Это решение проверено и работает на:

  • Ubuntu 22.04, 24.04+ (Linux 6.2 — 6.12+)
  • ALT Linux Gnome, Workstation, Workstation+
  • Debian 12+ (Linux 6.1+)
  • Fedora 38+ (Linux 6.2+)
  • openSUSE Tumbleweed (Linux 6.12+)

Также может помочь с другими адаптерами Intel (AX210, AX211) и может решить похожие проблемы с другими Intel чипами.

Для продвинутых пользователей

Мониторинг Bluetooth в реальном времени

# Следить за логами демона
journalctl -u bluetooth -f

# В другом терминале - следить за HCI статусом
watch -n 1 hciconfig

# Третий терминал - логи ядра
sudo dmesg -w | grep -i bluetooth

Отладка конкретного устройства

# Сканировать доступные устройства
hcitool scan

# Получить информацию об устройстве
hcitool info [MAC_ADDRESS]

# Установить питание
hcitool cmd 0x03 0x0005 0x01

# Проверить соединения
hcitool con

Благодарности и источники

Решение основано на:

  • Linux kernel Bluetooth subsystem documentation
  • Intel Wireless-Linux GitHub issues
  • Опыт сообщества Linux пользователей
  • Личное тестирование на ALT Linux и Ubuntu

Лицензия

Эта статья распространяется под лицензией Creative Commons Attribution 4.0 International (CC BY 4.0)

Вы свободны:

  • Делиться этой информацией
  • Адаптировать под свои нужды
  • Использовать в коммерческих целях

При условии: Указание авторства

Версии документа

Версия Дата Изменения
2.0 Апрель 2026 Обновлено для ядра 6.12.74, добавлены скрипты, расширена диагностика
1.5 Октябрь 2024 Первоначальное исправление для ядра 6.1-6.11
1.0 2023 Исходное решение

Последнее обновление: 2 апреля 2026 | Статус: Проверено и работает

Утилита MTR в ALT Linux

Что такое MTR

MTR (My Traceroute) — это консольный инструмент диагностики сети, объединяющий в себе функции

ping
и 
traceroute
. Он непрерывно проверяет каждый хоп на пути к цели и выводит статистику потерь и задержек в режиме реального времени, что упрощает поиск «узких» мест и слабых звеньев маршрута.

Установка в ALT Linux

sudo apt-get install mtr

Основные сценарии использования

1. Быстрая интерактивная проверка маршрута

Запускает интерактивную таблицу, которая обновляется до нажатия q:

mtr ya.ru

2. Одноразовый отчёт для скриптов и тикетов

Собирает 100 проб к каждому хопу и завершается:

mtr -r -c 100 ya.ru &gt; mtr-report.txt

3. Широкий отчёт с полными доменными именами

Используется, когда важно видеть FQDN каждого узла:

mtr -rw -c 50 8.8.8.8

4. Проверка только IPv4 или IPv6

mtr -4 ya.ru          # только IPv4
mtr -6 ya.ru          # только IPv6

5. Ускоренный/замедленный опрос

Интервал между пакетами по умолчанию 1 с. Уменьшаем или увеличиваем нагрузку:

mtr -i 0.5 ya.ru      # опрос каждые 0.5 с
mtr -i 5 ya.ru        # опрос каждые 5 с

6. Ограничение глубины трассировки

Проверяем только первые 3 хопа (удобно внутри локальной сети):

mtr -m 3 192.168.1.1

7. Смена протокола транспорта

По умолчанию используется ICMP. Можно переключиться на TCP или UDP:

mtr --tcp -P 443 ya.ru
mtr --udp ya.ru

8. Экспорт результатов

CSV для Excel, JSON для Grafana, XML для старых систем:

mtr --csv -c 100 ya.ru       &gt; trace.csv
mtr --json -c 100 ya.ru      &gt; trace.json

9. «Ночной» фоновый сбор статистики

Запуск в 

screen
или 
cron
без взаимодействия с терминалом:

screen -dmS mtr-job mtr -r -c 500 -i 2 1.1.1.1

10. Проверка двустороннего маршрута

Чтобы отличить проблему «туда» от проблемы «обратно», собирают два отчёта:

  • с сервера на клиента
  • с клиента на сервер

Сравнение Loss % и StDev в обоих файлах быстро покажет, на каком участке падают пакеты.

Горячие клавиши в интерактивном режиме

Клавиша

Действие

p

приостановить/возобновить опрос

d

переключить режим отображения

o

изменить порядок колонок

r

сбросить статистику

q

выход

Полезные опции одной строкой

mtr -4b -c 200 -i 0.8 -rw ya.ru
  • -4
     — только IPv4
  • -b
     — показать IP и hostname
  • -c 200
     — 200 циклов
  • -i 0.8
     — интервал 0.8 с
  • -rw
     — широкий отчёт с FQDN

Заключение

MTR — must-have утилита в арсенале администратора ALT Linux: она быстро локализует сетевые узкие места, предоставляет наглядную цифровую статистику и легко интегрируется в автоматизированные скрипты. Запомните три флага —

-r
(отчёт),
-c
(количество),
-w
(широкий формат) — и 90 % задач будут решены.

Cтавим и настраиваем Resilio Sync в ALT Linux GNOME

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

1. Установка

# 1.1. скачиваем официальный RPM
cd ~/Загрузки
wget https://download-cdn.resilio.com/stable/linux-x64/resilio-sync-x64.rpm

# 1.2. ставим
epm install ./resilio-sync-x64.rpm

2. Создаём системного пользователя и нужные каталоги

# 2.1. пользователь и группа
sudo groupadd -r rslsync 2>/dev/null
sudo useradd -r -g rslsync -d /var/lib/resilio-sync -s /sbin/nologin rslsync 2>/dev/null

# 2.2. рабочие директории
sudo mkdir -p /var/lib/resilio-sync /etc/resilio-sync
sudo chown rslsync:rslsync /var/lib/resilio-sync /etc/resilio-sync

3. Включаем автозапуск и проверяем статус

sudo systemctl enable --now resilio-sync
systemctl is-enabled resilio-sync   # должен выдать enabled
systemctl status resilio-sync       # active (running)

4. Настраиваем права: только нужные папки и ничего лишнего

Замените

YOUR_USER
на ваше имя пользователя (например,
ivan
).

# 4.1. чистим старые ACL (!!! если нужно сбросить права в каталоге)
sudo setfacl -b /home/YOUR_USER

# 4.2. запрет на весь домашний каталог (только traverse)
sudo setfacl -m u:rslsync:--x /home/YOUR_USER

# 4.3. полный доступ к выбранным папкам + наследование
for d in iCloud "Рабочий стол" Документы Загрузки Видео Музыка Изображения; do
  sudo setfacl -R -m u:rslsync:rwx "/home/YOUR_USER/$d"
  sudo setfacl -d -m u:rslsync:rwx "/home/YOUR_USER/$d"
done

# 4.4. то же для себя (чтобы вы могли удалять/изменять новые файлы)
for d in iCloud "Рабочий стол" Документы Загрузки Видео Музыка Изображения; do
  sudo setfacl -R -m u:$(id -un):rwx "/home/YOUR_USER/$d"
  sudo setfacl -d -m u:$(id -un):rwx "/home/YOUR_USER/$d"
done

5. Перезапускаем службу

sudo systemctl restart resilio-sync

6. Первый вход в веб-интерфейс

Откройте браузер по адресу http://127.0.0.1:8888/gui и задайте имя устройства и новый пароль администратора.

7. Проверяем автозапуск и права

# автозапуск
systemctl is-enabled resilio-sync   # enabled

# права: rslsync НЕ видит /home/YOUR_USER, но видит нужные папки
sudo -u rslsync ls /home/YOUR_USER          # Permission denied
sudo -u rslsync ls /home/YOUR_USER/Загрузки # OK

Готово: Resilio Sync стартует сам при загрузке ALT Linux, имеет доступ только к выбранным папкам и ничего лишнего; вы и сервис можете читать, писать и удалять новые файлы без sudo.

Поправить права можно скриптом ИИ-шный на свой страх и риск

#!/bin/bash
# Скрипт для глобальной настройки прав доступа в Resilio Sync
# Запускать с sudo: sudo ./setup-resilio-permissions.sh

set -e

echo "=== Настройка прав доступа Resilio Sync ==="
echo ""

# Определяем текущего пользователя (который запустил sudo)
if [ -z "$SUDO_USER" ]; then
    echo "Ошибка: скрипт должен быть запущен с sudo"
    exit 1
fi

SYNC_USER="$SUDO_USER"
SYNC_GROUP="$SUDO_USER"

echo "Пользователь для синхронизации: $SYNC_USER"
echo "Группа для синхронизации: $SYNC_GROUP"
echo ""

# 1. Добавляем пользователя в группу rslsync (если она существует)
if getent group rslsync > /dev/null 2>&1; then
    echo "1. Добавление пользователя $SYNC_USER в группу rslsync..."
    usermod -a -G rslsync "$SYNC_USER" || echo "   Предупреждение: не удалось добавить в группу (возможно, уже добавлен)"
    echo "   ✓ Готово"
else
    echo "1. Группа rslsync не найдена, пропускаем..."
fi

# 2. Создаём резервную копию конфигурации
CONFIG_FILE="/etc/resilio-sync/config.json"
if [ -f "$CONFIG_FILE" ]; then
    echo ""
    echo "2. Создание резервной копии конфигурации..."
    cp "$CONFIG_FILE" "${CONFIG_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
    echo "   ✓ Резервная копия создана"
fi

# 3. Обновляем конфигурацию Resilio Sync (если нужно)
echo ""
echo "3. Проверка конфигурации Resilio Sync..."
# Примечание: Resilio Sync не поддерживает прямую настройку прав доступа через config.json
# Используем групповые права и setgid вместо этого
echo "   ℹ Используем групповые права вместо параметров конфигурации"

# 4. Настраиваем системный сервис (опционально - можно изменить пользователя)
echo ""
echo "4. Настройка системного сервиса..."
SERVICE_FILE="/etc/systemd/system/multi-user.target.wants/resilio-sync.service"
if [ -f "$SERVICE_FILE" ]; then
    # Создаём резервную копию
    cp "$SERVICE_FILE" "${SERVICE_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
    
    # Обновляем UMask в сервисе для более открытых прав
    sed -i 's/UMask=0002/UMask=0002/' "$SERVICE_FILE" || true
    echo "   ✓ Сервис настроен"
else
    echo "   ⚠ Файл сервиса не найден: $SERVICE_FILE"
fi

# 5. Находим все синхронизируемые директории
echo ""
echo "5. Поиск всех синхронизируемых директорий..."

# Определяем группу для использования
if getent group rslsync > /dev/null 2>&1; then
    USE_GROUP="rslsync"
else
    USE_GROUP="$SYNC_GROUP"
fi

echo "   Используем группу: $USE_GROUP"
echo ""

# Функция для настройки прав на директорию
setup_directory_permissions() {
    local SYNC_DIR="$1"
    
    if [ ! -d "$SYNC_DIR" ]; then
        echo "   ⚠ Директория не найдена: $SYNC_DIR"
        return 1
    fi
    
    echo "   Обработка: $SYNC_DIR"
    
    # Исправляем владельца и группу существующих файлов и директорий
    # Владелец: пользователь, группа: rslsync (или группа пользователя, если rslsync нет)
    echo "      Исправление владельца и группы существующих файлов..."
    chown -R "$SYNC_USER:$USE_GROUP" "$SYNC_DIR" 2>/dev/null || echo "         ⚠ Не удалось изменить владельца/группу (может потребоваться больше прав)"
    
    # Устанавливаем setgid бит на директории (2775 = rwxrwxr-x + setgid)
    # Это гарантирует, что новые файлы будут создаваться с группой директории
    echo "      Установка setgid бита на директории..."
    find "$SYNC_DIR" -type d -exec chmod 2775 {} \; 2>/dev/null || echo "         ⚠ Не удалось установить setgid бит"
    
    # Устанавливаем права на файлы (0664 = rw-rw-r--)
    # Это даёт чтение/запись владельцу и группе
    echo "      Установка прав на файлы..."
    find "$SYNC_DIR" -type f -exec chmod 0664 {} \; 2>/dev/null || echo "         ⚠ Не удалось изменить права на файлы"
    
    # Настраиваем ACL для дополнительной защиты
    echo "      Настройка ACL..."
    setfacl -R -m d:g:"$USE_GROUP":rwx "$SYNC_DIR" 2>/dev/null || true
    setfacl -R -m g:"$USE_GROUP":rwx "$SYNC_DIR" 2>/dev/null || true
    
    echo "      ✓ Права настроены (владелец: $SYNC_USER, группа: $USE_GROUP)"
}

# Ищем все директории с .sync (исключаем служебные директории Resilio Sync)
SYNC_DIRS=$(find /home/"$SYNC_USER" -name ".sync" -type d 2>/dev/null | \
    grep -v "/\.config/resilio-sync" | \
    grep -v "/\.SyncUser" | \
    grep -v "/License/" | \
    xargs -I {} dirname {} | \
    sort -u)

# Также проверяем системные директории (если есть доступ)
if [ -d "/var/lib/resilio-sync" ]; then
    # Можно добавить логику для поиска системных директорий, если нужно
    # Пока пропускаем, так как они обычно требуют специальной настройки
    true
fi

# Подсчитываем количество найденных директорий
SYNC_COUNT=0
if [ -n "$SYNC_DIRS" ]; then
    SYNC_COUNT=$(echo "$SYNC_DIRS" | grep -v '^$' | wc -l)
fi

if [ "$SYNC_COUNT" -eq 0 ]; then
    echo "   ⚠ Не найдено синхронизируемых директорий"
    echo "   Проверьте, что Resilio Sync запущен и синхронизирует папки"
else
    echo "   Найдено директорий: $SYNC_COUNT"
    echo ""
    
    # Обрабатываем каждую директорию
    COUNTER=1
    while IFS= read -r SYNC_DIR; do
        if [ -n "$SYNC_DIR" ] && [ -d "$SYNC_DIR" ]; then
            echo "   [$COUNTER/$SYNC_COUNT] $SYNC_DIR"
            setup_directory_permissions "$SYNC_DIR"
            echo ""
            COUNTER=$((COUNTER + 1))
        fi
    done <<< "$SYNC_DIRS"
fi

# 6. Создаём .syncignore файлы в директориях с .git
echo ""
echo "6. Создание .syncignore файлов в директориях с .git..."

SYNCIGNORE_COUNT=0
if [ -n "$SYNC_DIRS" ] && [ "$SYNC_COUNT" -gt 0 ]; then
    while IFS= read -r SYNC_DIR; do
        if [ -n "$SYNC_DIR" ] && [ -d "$SYNC_DIR" ] && [ -d "$SYNC_DIR/.git" ]; then
            SYNCIGNORE_FILE="$SYNC_DIR/.syncignore"
            
            # Создаём или обновляем .syncignore
            if [ ! -f "$SYNCIGNORE_FILE" ] || ! grep -q "\.git/" "$SYNCIGNORE_FILE" 2>/dev/null; then
                {
                    echo "# Исключить .git из синхронизации Resilio Sync"
                    echo "# Git репозиторий должен синхронизироваться через git, а не через файловую синхронизацию"
                    echo ".git/"
                    echo ".gitignore"
                    echo "*.git"
                } >> "$SYNCIGNORE_FILE"
                
                chown "$SYNC_USER:$USE_GROUP" "$SYNCIGNORE_FILE" 2>/dev/null || true
                chmod 644 "$SYNCIGNORE_FILE"
                
                echo "   ✓ Создан/обновлён: $SYNCIGNORE_FILE"
                SYNCIGNORE_COUNT=$((SYNCIGNORE_COUNT + 1))
            else
                echo "   ℹ Уже существует: $SYNCIGNORE_FILE"
            fi
        fi
    done <<< "$SYNC_DIRS"
    
    if [ "$SYNCIGNORE_COUNT" -eq 0 ]; then
        echo "   ℹ Не найдено директорий с .git для создания .syncignore"
    fi
else
    echo "   ℹ Нет синхронизируемых директорий для проверки"
fi

echo ""
echo "=== Настройка завершена ==="
echo ""
echo "Обработано директорий: $SYNC_COUNT"
if [ "$SYNCIGNORE_COUNT" -gt 0 ]; then
    echo "Создано/обновлено .syncignore файлов: $SYNCIGNORE_COUNT"
fi
echo ""
echo "Следующие шаги:"
echo "1. Перезапустите Resilio Sync:"
echo "   sudo systemctl restart resilio-sync"
echo "   # Или для пользовательского экземпляра:"
echo "   systemctl --user restart resilio-sync"
echo ""
echo "2. Выйдите и войдите в систему заново, чтобы изменения группы вступили в силу"
echo ""
echo "3. Проверьте права доступа в одной из директорий:"
if [ -n "$SYNC_DIRS" ] && [ "$SYNC_COUNT" -gt 0 ]; then
    FIRST_DIR=$(echo "$SYNC_DIRS" | head -1)
    if [ -n "$FIRST_DIR" ] && [ -d "$FIRST_DIR" ]; then
        echo "   ls -la \"$FIRST_DIR\" | head -5"
        if [ -d "$FIRST_DIR/.git" ]; then
            echo "   ls -la \"$FIRST_DIR/.git/\" | head -5"
        fi
    fi
fi
echo ""
echo "4. Если проблемы остались, исправьте права вручную для конкретной директории:"
echo "   sudo chown -R $SYNC_USER:$USE_GROUP <путь_к_директории>"
echo ""
if [ -n "$SYNC_DIRS" ] && [ "$SYNC_COUNT" -gt 0 ]; then
    echo "5. Список всех обработанных директорий:"
    while IFS= read -r SYNC_DIR; do
        if [ -n "$SYNC_DIR" ] && [ -d "$SYNC_DIR" ]; then
            echo "   - $SYNC_DIR"
        fi
    done <<< "$SYNC_DIRS"
fi

Как безопасно настроить SSH-доступ к серверу с помощью ключей

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

Шаг 1: Создание безопасного SSH-ключа

Генерируем ключ с современным алгоритмом и обязательным паролем:

ssh-keygen -t ed25519 -C "project-prod-login@beget.tech"

Важно:

  • Укажите путь: ~/.ssh/project-prod-login
  • Обязательно задайте надёжный пароль (passphrase) для ключа
  • ed25519 безопаснее RSA при меньшей длине ключа

Шаг 2: Копирование ключа на сервер

Отправляем ключ безопасным способом:

ssh-copy-id -i ~/.ssh/project-prod-login login@beget.tech

Проверьте: на сервере должны быть правильные права:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Шаг 3: Безопасная настройка SSH-конфига

nano ~/.ssh/config

Добавьте с ограничениями:

Host project-prod
    HostName beget.tech
    User login
    Port 22
    IdentityFile ~/.ssh/project-prod-login
    IdentitiesOnly yes
    ForwardAgent no

Почему это важно:

  • IdentitiesOnly yes
     — запрещает автоматическую отправку всех ключей
  • ForwardAgent no
     — отключает небезопасное перенаправление агента

Рекомендации по безопасности

  1. На сервере: отключите парольную аутентификацию в 
    /etc/ssh/sshd_config

    PasswordAuthentication no

    → затем

    systemctl restart sshd

  2. Измените порт SSH (не 22) для снижения брутфорс-атак
  3. Никогда не передавайте приватный ключ по незащищённым каналам
  4. Регулярно обновляйте ключи (раз в 6-12 месяцев)
  5. Храните резервную копию ключа в зашифрованном хранилище

Проверка безопасности

Убедитесь, что всё настроено правильно:

# Проверка прав доступа
ls -la ~/.ssh
# Приватный ключ должен быть: -rw------- (600)

# Тест подключения
ssh -v project-prod

Заключение

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

Помните: ваш приватный ключ — это как цифровой паспорт. Обращайтесь с ним соответственно.

Настройка Nautilus для отображения чередующихся цветов строк в режиме списка

Шаг 1: Создание конфигурационного файла

Чтобы изменить внешний вид Nautilus, необходимо создать файл стилей `gtk.css` в вашем домашнем каталоге. Для этого выполните команду в терминале:

touch ~/.config/gtk-4.0/gtk.css

Шаг 2: Добавление стилей

Откройте созданный файл `gtk.css` с помощью любого текстового редактора, например:

nano ~/.config/gtk-4.0/gtk.css

Вставьте в файл следующий код:

/* Определение базовых цветов */
:root {
    --row-even-bg-color: hsla(0, 0%, 100%, 0.04); /* Полупрозрачный белый (4%) для осветления фона */
    --row-hover-bg-color: hsla(0, 0%, 100%, 0.08); /* Полупрозрачный белый (8%) для эффекта наведения */
}

/* Применение цветов к Nautilus */
.nautilus-list-view row:nth-child(even):not(:hover):not(:selected) {
    background-color: var(--row-even-bg-color);
}

.nautilus-list-view row:hover {
    background-color: var(--row-hover-bg-color);
}

Сохраните изменения и закройте текстовый редактор.

Шаг 3: Перезапуск Nautilus

Чтобы изменения вступили в силу, необходимо перезапустить Nautilus. Выполните в терминале:

Выходим из Nautilus

nautilus -q

Запускаем Nautilus

nautilus &

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

Увеличение курсора при резком движении мыши.

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

Если вы пользовались MacBook с MacOS, вам мог понравиться способ поиска курсора, при котором он увеличивался при резком движении мыши. Этот метод доступен и в GNOME с помощью расширения Wiggle.

Установка Wiggle

После установки расширения Wiggle вы сможете находить курсор, резко двигая мышью влево-вправо. Также можно настроить размер курсора и различные эффекты. Для настройки нажмите на шестеренку в разделе Расширения.

Установить расширение Wiggle можно по следующей ссылке: Wiggle на GNOME Extensions.

Источник: https://t.me/alt_gnome/1605

Grub-btrfs: Снимки системы (snapshot) в меню GRUB

Настройка GRUB для восстановления из снимков BTRFS

При использовании файловой системы BTRFS с загрузчиком GRUB можно удобно управлять снимками системы через меню загрузки. Это позволяет быстро восстанавливать систему до предыдущего состояния. В этой статье рассмотрим установку и настройку grub-btrfs для отображения снимков в GRUB.

Установка grub-btrfs

Установите пакет в зависимости от используемого пакетного менеджера:

Через apt (Debian/Ubuntu)

sudo apt update
sudo apt install grub-btrfs

Через epm (ALT Linux)

su -
epm -i grub-btrfs

После установки обновите конфигурацию GRUB:

sudo update-grub

Настройка автоматического обновления меню GRUB

Для динамического отображения новых снимков в меню GRUB активируйте встроенный демон grub-btrfsd:

  1. Отредактируйте конфигурацию сервиса:
    sudo systemctl edit --full grub-btrfsd
  2. Измените строку запуска демона:

    Замените:

    ExecStart=/usr/bin/grub-btrfsd --syslog /.snapshots

    на:

    ExecStart=/usr/bin/grub-btrfsd --syslog --timeshift-auto
  3. Сохраните изменения и активируйте сервис:
    sudo systemctl enable --now grub-btrfsd

После настройки сервис будет автоматически обновлять меню GRUB при создании или удалении снимков. В меню загрузки появится пункт ALT snapshots (или Sisyphus snapshots для ALT Regular GNOME).

Как это работает

Утилита grub-btrfs сканирует корневой раздел BTRFS и добавляет доступные снимки в меню GRUB. При активации демона grub-btrfsd изменения в снимках (создание/удаление) моментально отражаются в загрузочном меню. Это обеспечивает удобный способ отката системы к рабочему состоянию.

Примечания

  • Убедитесь, что снимки создаются в каталоге
    /.snapshots
    (или измените путь в настройках сервиса).
  • Для работы демона требуется включить поддержку systemd-юнитов.

Заключение

Настройка grub-btrfs позволяет быстро восстанавливать систему через меню GRUB, используя снимки BTRFS. После установки и активации автоматического обновления вы получите актуальный список снимков при каждой загрузке.

Установка GRUB на Alt Linux с использованием UEFI и BTRFS

В этой статье описывается процесс установки загрузчика GRUB на систему Alt Linux с использованием UEFI и файловой системы BTRFS.

Шаги установки

  1. Получите доступ к суперпользователю:
  2. su -
  3. Проверьте доступные диски и разделы:
  4. fdisk -l

    Выберите нужные разделы. У меня они выглядят так:

    • /dev/nvme0n1  // Диск
    • /dev/nvme0n1p1 // Раздел с EFI
    • /dev/nvme0n1p3 // Раздел с Linux System
  5. Смонтируйте необходимые разделы:
  6. cd /
    mkdir mnt
    mount -o subvol=@ /dev/nvme0n1p3 mnt
    mount --bind /dev /mnt/dev
    mount --bind /dev/pts /mnt/dev/pts
    mount --bind /sys /mnt/sys
    mount --bind /proc /mnt/proc
    mount --bind /run /mnt/run
    mount /dev/nvme0n1p1 mnt/boot/efi
  7. Перейдите в среду chroot:
  8. sudo chroot mnt
  9. Сгенерируйте конфигурацию GRUB:
  10. grub-mkconfig -o /boot/grub/grub.cfg
  11. Установите и проверьте GRUB:
  12. grub-install --removable /dev/nvme0n1
    grub-install --recheck /dev/nvme0n1
  13. Обновите конфигурацию GRUB:
  14. update-grub
  15. Выйдите из chroot и размонтируйте разделы:
  16. exit
    sudo umount -R /mnt

Альтернативный вариант установки GRUB (вместо шага — Установите и проверьте GRUB)

Вы также можете попробовать следующую команду:

grub-install --target=x86_64-efi --efi-directory=/boot/efi --boot-directory=/boot --recheck --debug

Источник — https://logan.tw/posts/2015/05/17/grub-install-and-btrfs-root-file-system/

MiniDLNA — Alt Linux

Устанавливаем приложение

sudo apt-get install minidlna

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

sudo mkdir /home/DNLA

А чтобы было удобно в нее заходить, создаем символическую ссылку из пользовательской папки видео. $USER — нужно заменить на имя своей учетной записи.

sudo ln -s /home/DNLA '/home/$USER/Видео/DLNA'

Для новой папки сделал себя владельцем и установил права на чтение для остальных пользователей (_minidlna). $USER — нужно заменить на имя своей учетной записи.

sudo chown -R $USER:$USER /home/DNLA
sudo chmod -R 755 /home/DNLA

Теперь можно настроить конфигурационный файл.

sudo nano /etc/minidlna.conf

В него вносим следующие изменения.

user=_minidlna
media_dir=/home/DNLA
db_dir=/var/cache/minidlna

Перезапускаем демон, происходит сканирование и индексация файлов.

sudo systemctl daemon-reload

Запускаем сервис minidlna.

sudo systemctl start minidlna.service

Проверяем статус сервиса.

sudo systemctl status minidlna.service

Активируем автоматический запуск при загрузке.

sudo systemctl enable minidlna.service

После повторного изменения конфигурации перезапускаем сервис.

sudo systemctl restart minidlna.service