Хабрахабр

Astra Linux 1.6 (Смоленск). Готова ли система к работе с простыми пользователями? Примеры костылей


Нейтрализация пользователя и процесс установки новой ОС

Сегодня хотим поделиться опытом миграции одной организации (далее – Заказчик) на отечественную ОС в рамках выполнения требований по импортозамещению. Привет, Хабр. Нам же досталось удовольствие развертывания, оптимизации этой ОС и выполнение требований по защите информации.
Сразу нужно обозначить, что Заказчик выбрал и закупил эту ОС самостоятельно.

Задача

Имеется государственная информационная система 2 класса защищенности (далее – ГИС) с порядка 1000 условно однотипных пользователей, со строго определенным кругом служебных задач. Сама ГИС состоит из веб-сервисов, распределенных примерно на 30 объектах с локальными базами. Также есть удаленные рабочие места в поселениях. При этом есть общий домен (но далеко не везде), есть шары локальные/корпоративные. Парк компьютеров и оргтехники кое-где не первой свежести, каналы передачи между объектами не ахти. Есть системные администраторы на местах и главные в управлении. В общем, стандартная ситуация, характерная для средних госучреждений перед великой миграцией на отечественное ПО.

Проблемы, тесты, изучение

Шару мы подключали через астровский графический файловый менеджер (fly-fm). 1. Но эти имена превращаются в набор нечитаемых человеком символов при копировании этих файлов на рабочий стол и в другие места на диске. С отображением русских имён файлов на «оконных» шарах проблем нет. По этому вопросу работали с разработчиками, вопрос сложный, хоть и фиксы есть.

Способ работает, но требует времени на тестирование в реальных условиях. Есть способ монтирования шары средствами Linux, независимо от особенностей астровского софта. Суть проблем с разграничением доступа к файлам на шаре при подключении Linux-клиента, тестируем подключение с различными опциями, рекомендуемыми разработчиками пакета cifs-tools, который отвечает за монтирование шар. Предварительные испытания показали, что файлы не коверкаются при отображении и копировании, но есть проблемы с совместимостью с некоторыми версиями Windows Server. Иногда используем autofs, в остальных случаях инструктируем как «не надо делать» из того что они привыкли.

Связано с первым. 2. Им приходится делать две операции, из Firefox они сначала сохраняют на рабочий стол, а потом перекидывают документ на шару. При монтировании шары из астровского fly-fm, пользователи не могут сохранять файлы из Firefox непосредственно на «шару». Тоже самое для того, чтобы выложить файл на сайт, сначала берут его с шары на рабочий стол, а потом уже закидывают с него в свои базы данных.

Это происходит из-за того, что Firefox использует свой собственный диалог открытия и записи файлов, в котором нет возможности указать на ту символическую ссылку шары, которую мы создали в астровском fly-fm.

Пока использование иногда atofs или инструкции использования папки загрузки. Данной проблемы бы не было, используй астра не своё графическое окружение, а какое-нибудь из популярных в Linux.

Расшаривание USB-принтеров в сеть. 3. Покрутили и cups заработал, только с оговоркой – у одного клиента может быть только 1 сервер печати и компьютер, настроенный в режим клиента, не может использовать свои локальные Принтеры, потому как свой сервер печати глушится. Два варианта стандартных: через сервер печати cups и samba протокол не взлетели со стандартными настройками.

В учреждениях часто используют макросы в документах предыдущего офисного пакета. 4. Эти макросы несовместимы с макросами в Libre Office, потому что в последнем они пишутся не на Visual Basic, а на Java.

к. И более того, создатели Астры выкинули из дистрибутива всё связанное с Java, т. Т. она принадлежит американской компании Oracle. написать макросы в астровском офисе пока вообще невозможно. е. Единственный вариант — эмуляция или рядом стоящий компьютер с «Окнами».

Выводы и принятые решения

По анализу сложившейся ситуации с инфраструктурой было решено, что автоматизация процесса перехода на отечественную ОС может повлечь неожиданные неприятности. Такой подход можно было применять только в управлении (центральный офис) – в случае чего можно было оперативно отреагировать. На локальных объектах в районах хоть и были вполне типовые рабочие места и техпроцессы, это не дает полной стандартизации и возможности «тихой установки».

Что все-таки мешало запустить одновременную установку по сети:

  • отсутствие общего домена;
  • зоопарк железа и периферии;
  • загрузка из сети не является приоритетной, все равно нужно доехать до удаленного рабочего места и сменить порядок загрузки (как следствие отсутствия централизованного домена – нет оперативной возможности устанавливать какие-либо агенты для предварительной настройки);
  • плохие каналы связи с удаленными рабочими местами и между объектами;
  • техпроцесс хоть по большей части и типовой, но по факту все равно переводились не все пользователи, т. к. у значительной части есть задачи, которые можно пока что выполнять только по Windows.

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

Как совершенно стандартных, так и экзотических (в том числе – самописных). В целом по теме перехода на отечественное программное обеспечение: на данный момент так и не решены вопросы с миграцией многих приложений. Что в свою очередь может повлечь потребность в актуализации/пересмотре проектных и аттестационных документов, ну и прочие философские размышления на тему ИБ в масштабах страны. Поэтому миграция на новую ОС сейчас это, в том числе, нахождение оптимальных решений выполнения служебных задач заново и, возможно, существенное изменение существующих технологических процессов организаций.

Намечены этапы, выбраны следующие объекты и другие рабочие места для перехода на новую ОС. Миграция в рассмотренной организации продолжается. Пока процесс прогрессирует сложно, хоть и порой срочно, но разнообразные подходы тестируются и затем применяются. Также этот проект коррелируется со спущенным сверху планом перехода на отечественное ПО в других наших Заказчиках и новых клиентах. Информации для аналитики, выбора решений предостаточно, будем обязательно освещать по мере сил и возможности.

Далее технические детали, шаманства и костыли.

Подготовка флэшки и установка

1. Для установки понадобится флэшка или иной внешний USB-накопитель NTFS объёмом не
менее 16Гб. Образ Porteus весит 270Мб. Это по сути мобильный Линукс, который нужен только для запуска нашего скрипта-инсталятора. Образ устанавливаемого Астра Линукс весит 8Гб. При желании можно ужать образ на пол гига и тогда хватит и 8 гиговой флэшки.

Скопируйте на неё образ системы и дерево каталогов слегка изменённой нами портативной ОС Porteus. 2.

Сделайте флэшку загрузочной, запустив скрипт: 3.

/boot/Porteus-installer-for-Linux.com — из Linux
/boot/Porteus-installer-for-Windows.exe — из Windows

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

Для Porteus нами был создан модуль, содержащий bash-скрипт развёртывания Astra Linux в диалоговом режиме.

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

Скрипт

#!/bin/sh
# unmount swap disks
for i in `cat /proc/swaps | grep dev | awk -F" " ''`; do swapoff $i; done
#variables
DIALOG=${DIALOG=dialog}
tempfile=`mktemp 2>/dev/null` || tempfile=/tmp/temp$$
tempfile1=`mktemp 2>/dev/null` || tempfile1=/tmp/temp$$
tempfile2=`mktemp 2>/dev/null` || tempfile2=/tmp/temp$$
tempfile3=`mktemp 2>/dev/null` || tempfile3=/tmp/temp$$
tempfile4=`mktemp 2>/dev/null` || tempfile4=/tmp/temp$$
#image selection
setimage () {
mdevs=`mount | grep fuseblk | awk -F" " '{print $3}'`
cd /
$DIALOG --backtitle "Выберите образ установочного диска:" \
--menu " " 15 80 5 \
`find $mdevs -name *.di -type f | awk '{print $0,"image"}'` 2> $tempfile
retval=$?
case $retval in
0)
image=`cat $tempfile | awk -F/ '{print $6}'`
input=`cat $tempfile`
echo "Выбран образ диска: $image"
sleep 2;;
1)
echo "Отказ от ввода."
exit 0;;
255)
echo "Нажата клавиша ESC."
exit 0;;
esac
}
#disk selection
setdisk () {
sdisk=`mount | grep fuseblk | awk -F" " '{print $1}' | awk -F/ '{print $3}' | tr -d [0-9]`
$DIALOG --backtitle "Выберите диск для установки образа $image :" \
--menu "`parted -l | grep -E "Модель|Диск \/"`" 15 80 5 \
`fdisk -l | grep "Диск /"| grep "/dev/s" | awk -F" " '{print $2,$1}'| awk -F: '{print $1,$2}' | sed "/$sdisk/d"` 2>
$tempfile1
retval=$?
case $retval in
0)
disk=`cat $tempfile1 | awk -F/ '{print $3}'`
output=`cat $tempfile1`
echo "Диск $disk выбран для клонирования на него образа $image"
sleep 2;;
1)
echo "Отказ от ввода."
exit 0;;
255)
echo "Нажата клавиша ESC."
exit 0;;
esac
}
#cloning (dd process)
cloning () {
bs=`hdparm -I $output | grep "cache/buffer size" | awk -F" " '{print $4}'`
umount -l $output"*"
dd if=/dev/zero of=$output bs=512 count=1
clear
sleep 1
echo "Клонирование образа $image на диск $disk..."
#dd if=$input of=$output bs=$bs 2>/tmp/error & pid=$!
dd if=$input of=$output bs=8M 2>/tmp/error & pid=$!
sleep 2
while [ -d /proc/$pid ];
do kill -USR1 $pid && tail -n 2 /tmp/error | grep GB && sleep 10 && clear;
done
clear
tail -n 3 /tmp/error
echo "Процесс клонирования завершён."
rm /tmp/error
sleep 2
}
#resize second partition
resizepart () {
echo "Размер второго раздела диска до расширения:"
fdisk -l $output"2" | head -n 1
echo "Расширяем второй раздел диска $disk..."
parted $output rm 2
parted $output mkpart primary 2GB 100%
resize2fs -f $output"2"
e2fsck $output"2"
echo "Текущий размер второго раздела:"
fdisk -l $output"2" | head -n 1
sleep 2
}
#hostname
sethost () {
$DIALOG --inputbox "Введите имя компьютера:" 10 80 2> $tempfile2
retval=$?
case $retval in
0)
hostn=`cat $tempfile2`
mount $output"2"
echo $hostn >/mnt/$disk"2"/etc/hostname
hosts=/mnt/$disk"2"/etc/hosts
/bin/cat << ENDFILE >$hosts
127.0.0.1 localhost
127.0.1.1 $hostn
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip-allnodes
ff02::2 ip6-allrouters
ENDFILE
echo "Имя компьютера установлено как: `cat /mnt/$disk"2"/etc/hostname`"
sleep 2;;
1)
echo "Отказ от ввода."
exit 0;;
255)
echo "Нажата клавиша ESC."
exit 0;;
esac
}
#adduser
adduser () {
$DIALOG --inputbox "Введите имя пользователя:" 8 40 --inputbox "Введите пароль:" 8 40 2> $tempfile3
retval=$?
case $retval in
0)
name=`awk '{print $1}' $tempfile3`
pass=`awk '{print $2}' $tempfile3`
passf=/mnt/$disk"2"/tmp/pass
/bin/cat << ENDFILE >$passf
parsec_pam del
useradd -m -N -s /bin/bash -G cdrom,audio,video,floppy,plugdev,dialout,users $name
echo -e "$pass\n$pass\n" | passwd $name
passwd -w 14 -x 90 $name
parsec_pam add
ENDFILE
chmod 755 $passf
chroot /mnt/$disk"2" /tmp/pass
echo "Имя пользователя: $name"
echo "Пароль пользователя: $pass"
sleep 2;;
1)
echo "Отказ от ввода."
exit 0;;
255)
echo "Нажата клавиша ESC."
exit 0;;
esac
}
#kasperftp
kasper () {
$DIALOG --inputbox "Введите ip адрес ftp сервера для обновлений антивируса:" 10 80 2> $tempfile4
retval=$?
case $retval in
0)
kftp=`cat $tempfile4`
obnovftp=/mnt/$disk"2"/opt/kaspersky/kesl/bin/kesl-obnovftp
/bin/cat << ENDFILE >$obnovftp
SourceType=Custom
ConnectionTimeout=10
[CustomSources.item_1]
URL=ftp://ftpuser:1qwertyuiop_0@$kftp/Updates
Enabled=Yes
ENDFILE
echo "ip адрес ftp сервера для обновлений антивируса: $kftp"
sleep 2;;
1)
echo "Отказ от ввода."
exit 0;;
255)
echo "Нажата клавиша ESC."
exit 0;;
esac
} autofs () {
mcedit /mnt/$disk"2"/etc/auto.share
}
#statement
state () {
echo "Образ $image установлен на диск $disk."
echo "Информация о текущих разделах диска $disk:"
fdisk -l /dev/$disk
echo "ip адрес ftp сервера для обновлений антивируса: `cat /mnt/$disk"2"/opt/kaspersky/kesl/bin/kesl-obnovftp |
grep URL | awk -F@ '{print $2}' | awk -F/ '{print $1}'`"
echo "Имя компьютера: `cat /mnt/$disk"2"/etc/hostname`"
echo "Имя пользователя: $name"
echo "Пароль пользователя: $pass"
echo "Пользователь принадлежит группам:"
cat /mnt/$disk"2"/etc/group | grep $name | awk -F: '{print $1}'
echo "Установка системы завершена. Введите reboot или нажмите Ctrl+Alt+Del для перезагрузки компьютера."
}
#program start:
setimage
setdisk
cloning
resizepart
sethost
adduser
kasper
autofs
state
exit 0

Изменения, внесённые нами в конфигурацию системы

1. Включили цифровую клавиатуру на экране приветствия системы, по умолчанию была выключена. Опция «NumLock=On» в конфигурационном файле:

/etc/X11/fly-dm/fly-dmrc

Устранили артефакты и медленную отрисовку окон для встроенных видеокарт на базе чипов Intel, включив режим отрисовки UXA в файле: 2.

/etc/X11/xorg.conf.d/20-intel.conf

Section "Device"
Identifier "Intel Graphics"
Driver "intel"
Option "AccelMethod" "uxa"
Option "TearFree" "true"
Option "Tiling" "true"
EndSection
Section "Extensions"
Option "Composite" "Enable"
Option "RENDER" "Enable"
EndSection
Section "ServerFlags"
Option "AIGLX" "true"
EndSection

3. Добавлена возможность сделать локальный сервер печати CUPS клиентом другого сервера. Это позволяет использовать принтеры, подключенные к другим Linux машинам по USB, когда возникают проблемы с их подключением по сети через веб интерфейс.

Создан файл:

/etc/cups/client.conf

#ServerName 10.12.x.x

Здесь необходимо убрать комментарий строки и дописать адрес удалённой машины с принтером. После этого принтер сразу же будет доступен для печати.

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

Файлы:

/etc/fonts/conf.avail/11-fontsalias.conf

Код

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<alias>
<family>serif</family>
<prefer><family>PT Sans</family></prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer><family>PT Sans</family></prefer>
</alias>
<alias>
<family>sans</family>
<prefer><family>PT Sans</family></prefer>
</alias>
<alias>
<family>monospace</family>
<prefer><family>PT Sans</family></prefer>
</alias>
<alias>
<family>mono</family>
<prefer><family>PT Sans</family></prefer>
</alias>
<match>
<test name="family"><string>Arial</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Sans</string>
</edit>
</match>
<match>
<test name="family"><string>Helvetica</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Sans</string>
</edit>
</match>
<match>
<test name="family"><string>Verdana</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Sans</string>
</edit>
</match>
<match>
<test name="family"><string>Tahoma</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Sans</string>
</edit>
</match>
<match>
<!-- Insert joke here -->
<test name="family"><string>Comic Sans MS</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Sans</string>
</edit>
</match>
<match>
<test name="family"><string>Times New Roman</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Serif</string>
</edit>
</match>
<match>
<test name="family"><string>Times</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Sans</string>
</edit>
</match>
<match>
<test name="family"><string>Courier New</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Sans</string>
</edit>
</match>
<match>
<test name="family"><string>Arimo</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Sans</string>
</edit>
</match>
<match>
<test name="family"><string>Roboto</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Sans</string>
</edit>
</match>
<match>
<test name="family"><string>OpenSymbol</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Sans</string>
</edit>
</match>
<match>
<test name="family"><string>Noto Sans</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Sans</string>
</edit>
</match>
<match>
<test name="family"><string>Carlito</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Sans</string>
</edit>
</match>
<match>
<test name="family"><string>Fixed</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Sans</string>
</edit>
</match>
<match>
<test name="family"><string>Lucida</string></test>
<edit name="family" mode="assign" binding="strong">
<string>PT Sans</string>
</edit>
</match>
</fontconfig>

/etc/fonts/conf.avail/12-noaa.conf

Код

<?xml version = '1.0'?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- /etc/fonts/local.conf file for local customizations -->
<fontconfig>
<match target="font" >
<edit mode="assign" name="hinting" >
<bool>true</bool>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="antialias" >
<bool>false</bool>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="embeddedbitmap" >
<bool>false</bool>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="hintstyle" >
<const>hintfull</const>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="autohint" >
<bool>false</bool>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="lcdfilter" >
<const>lcdlight</const>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="rgba" >
<const>rgb</const>
</edit>
</match>
<match target="pattern" >
<edit mode="assign" name="dpi" >
<double>96</double>
</edit>
</match>
</fontconfig>

/etc/fonts/conf.avail/13-aa.conf

Код

<?xml version = '1.0'?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- /etc/fonts/local.conf file for local customizations -->
<fontconfig>
<match target="font" >
<edit mode="assign" name="hinting" >
<bool>true</bool>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="antialias" >
<bool>true</bool>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="embeddedbitmap" >
<bool>false</bool>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="hintstyle" >
<const>hintslight</const>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="autohint" >
<bool>false</bool>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="lcdfilter" >
<const>lcdlight</const>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="rgba" >
<const>rgb</const>
</edit>
</match>
<match target="pattern" >
<edit mode="assign" name="dpi" >
<double>96</double>
</edit>
</match>
</fontconfig>

За включение и выключения сглаживания отвечают скрипты:

/usr/local/bin/aaon
/usr/local/bin/aaoff

Добавлена сетевая папка для сканирования с сетевых МФУ, позволяющих сохранять изображения по smb протоколу. 5. В стандартный файл конфигурации Samba-сервера:

/etc/samba/smb.conf

внесена секция:

[scan]
path = /var/scan
comment = scan
read only = no
guest ok = no
guest only = no
valid users = scan
create mask = 0666
directory mask = 0777

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

#[share]
#path = /var/share
#comment = share
#read only = no
#guest ok = yes
#create mask = 0666
#directory mask = 0777

в системе зарегистрирован samba-пользователь scan с паролем scan

Создан скелет настроек для вновь регистрируемых локальных пользователей системы. 6. Некоторые изменения будут описаны подробно далее по тексту. Он содержит мелкие изменения внешнего вида рабочего стола, изменённые настройки пользовательских приложений, сертификаты для подключения браузера к необходимым сетевым ресурсам и т.д.

Создан файл конфигурации сервиса rc-local для подсистемы инициализации Linux. 7. Это даёт возможность по необходимости подгружать какие-либо скрипты на стадии инициализации системы.

Файлы:

/etc/rc.local

#!/bin/sh -e
exit 0

/etc/systemd/system/rc-local.service

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target

8. Добавлены фирменные драйвера Xerox для некоторых сетевых принтеров.

Установлен и настроен пакет autofs. 9. В файл: Позволяет подключать сетевые папки через cifs-utils на системном уровне.

/etc/auto.master

добавлена строка:

/mnt /etc/auto.share --ghost --timeout=60

создан файл конфигурации с инструкцией внутри:

/etc/auto.share

Написан скрипт для инициализации сервера обновлений для антивируса Касперского и проверки обновления баз: 10.

/usr/local/bin/kasperftp

#!/bin/sh
echo "Останавливаем обновления, если задание уже запущено..."
/opt/kaspersky/kesl/bin/kesl-control --stop-task 6
sleep 2
echo "Обновляем адрес сервера обновлений."
/opt/kaspersky/kesl/bin/kesl-control --set-settings 6 --file /opt/kaspersky/kesl/bin/kesl-obnovftp
echo "Проверка изменений..."
/opt/kaspersky/kesl/bin/kesl-control --start-task 6
/opt/kaspersky/kesl/bin/kesl-control -W
exit 0

11. Добавлены обои рабочего стола и собственная тема экрана приветствия системы.

Подключение принтеров.

0. Настройка принтеров производится через страницу конфигурации CUPS в браузере по адресу: 127. 1:631 или localhost:631 0.

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

При добавлении сетевого принтера обычно используется AppSocket/HP JetDirect или протокол интернет-печати (ipp) c указанием ip адреса.

В этом случае вам не понадобится установка каких-либо драйверов. Если же сетевой принтер не подключился данными способами, то можно сделать локальный сервер печати CUPS клиентом другого сервера, отредактировав файл /etc/cups/client.conf, указав в нём сетевой адрес машины с подключенными принтерами. Хотя в базе CUPS есть огромное количество драйверов, всё же иногда требуется установка фирменных.

Для некоторых сетевых принтеров Xerox нами уже установлены фирменные драйвера и конфигуратор, команда:

xeroxprtmgr

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

Перейдите в панель управления > оборудование > установка дополнительного плагина HP, затем там же > установка принтеров, факсов, сканеров HP. Если у вас принтер HP, то лучше воспользоваться фирменными драйверами, которые так же предустановлены в систему.

Сканеры

Если сканер найден, вы увидите вывод с его названием. Для установки сканера нужно в терминале от администратора системы ввести команду scanimage -L. Если вывод будет пустым, то вам следует поискать фирменные драйвера в сети Интернет.

Делитесь в комментариях своим опытом внедрения отечественных ОС. На этом пока все.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть