Imported from SRPM

This commit is contained in:
Sergey Zhemoytel 2024-09-02 14:12:23 +03:00
commit 134cfb8c0f
3 changed files with 302 additions and 0 deletions

5
.abf.yml Normal file
View file

@ -0,0 +1,5 @@
sources:
cndrvcups-capt-2.71-1.i386.rpm: 7500c8b1eb675322c68307ad5d4edf69bf21ca3b
cndrvcups-capt-2.71-1.x86_64.rpm: 5753f344805e9070249f7698ff52cfeb94de6a98
cndrvcups-common-3.21-1.i386.rpm: 9775352fd31a1dbed06670b75ae285f11a1f12f1
cndrvcups-common-3.21-1.x86_64.rpm: c679852a01b2a6523be0c2321072038d0b8db2e7

31
rosa-canon-lbp.spec Normal file
View file

@ -0,0 +1,31 @@
%define debug %nil
%define debug_package %nil
Name: rosa-canon-lbp
Version: 0.0.1
Release: 1
Summary: Bash scrpt for install Canon LBP printers
License: no
Group: Development/Other
URL: https://abf.io
Source0: rosa_canon_lbp.sh
Source1: cndrvcups-capt-2.71-1.i386.rpm
Source2: cndrvcups-capt-2.71-1.x86_64.rpm
Source3: cndrvcups-common-3.21-1.i386.rpm
Source4: cndrvcups-common-3.21-1.x86_64.rpm
%description
rosa-canon-lbp.sh script for installation Canon LBP printers
%prep
%build
%install
%files

266
rosa_canon_lbp.sh Normal file
View file

@ -0,0 +1,266 @@
#!/bin/bash
##################################################
#версия 0.3 от 05 октября 2019 года. С правками от 26 августа 2024 года
#http://wiki.rosalab.ru/ru/index.php/Установка_принтеров_Canon_LBP
##################################################
#проверка на суперпользователя
[ $USER != 'root' ] && exec sudo "$0"
#пользователь под которым мы вошли в ситему
LOGIN_USER=$(logname)
[ -z "$LOGIN_USER" ] && LOGIN_USER=$(who | head -1 | awk '{print $1}')
#версия драйвера
DRIVER_VERSION='2.71-1'
DRIVER_VERSION_COMMON='3.21-1'
#ссылки на пакеты драйвера
declare -A URL_DRIVER=([x86_64_common]='https://drive.google.com/uc?export=download&confirm=no_antivirus&id=1rF7n-L6l6ZEQfqWZn62oB8xXZkF7C8vP' \
[x86_64_capt]='https://drive.google.com/uc?export=download&confirm=no_antivirus&id=1o7RqQnQwAXW8fb636mpiZrvc0PafJpYZ' \
[i386_common]='https://drive.google.com/uc?export=download&confirm=no_antivirus&id=1BYgQlYOT7LKKuvcncbxViimb00OFfrgG' \
[i386_capt]='https://drive.google.com/uc?export=download&confirm=no_antivirus&id=1hi95gV_WeH_NXaum5K-NEn5JdAPqas2r')
#соостветствие ppd файлов и моделей принтеров
declare -A LASERSHOT=([LBP-810]=1120 [LBP-1120]=1120 [LBP-1210]=1210 \
[LBP2900]=2900 [LBP3000]=3000 [LBP3010]=3050 [LBP3018]=3050 [LBP3050]=3050 \
[LBP3100]=3150 [LBP3108]=3150 [LBP3150]=3150 [LBP3200]=3200 [LBP3210]=3210 \
[LBP3250]=3250 [LBP3300]=3300 [LBP3310]=3310 [LBP3500]=3500 [LBP5000]=5000 \
[LBP5050]=5050 [LBP5100]=5100 [LBP5300]=5300 [LBP6000]=6018 [LBP6018]=6018 \
[LBP6020]=6020 [LBP6020B]=6020 [LBP6200]=6200 [LBP6300n]=6300n [LBP6300]=6300 \
[LBP6310]=6310 [LBP7010C]=7018C [LBP7018C]=7018C [LBP7200C]=7200C [LBP7210C]=7210C \
[LBP9100C]=9100C [LBP9200C]=9200C)
#отсортированные имена принтеров
NAMESPRINTERS=$(echo "${!LASERSHOT[@]}" | tr ' ' '\n' | sort -n -k1.4)
#список моделей, которые поддерживаются утилитой автоотключения
declare -A ASDT_SUPPORTED_MODELS=([LBP6020]='MTNA002001 MTNA999999' \
[LBP6020B]='MTMA002001 MTMA999999' [LBP6200]='MTPA00001 MTPA99999' \
[LBP6310]='MTLA002001 MTLA999999' [LBP7010C]='MTQA00001 MTQA99999' \
[LBP7018C]='MTRA00001 MTRA99999' [LBP7210C]='MTKA002001 MTKA999999')
#архитектура операционной системы
if [ "$(uname -m)" == 'x86_64' ]; then
ARCH='x86_64'
else
ARCH='i386'
fi
#делаем рабочим каталог, в котором находится этот скрипт
cd "$(dirname "$0")"
function valid_ip() {
local ip=$1
local stat=1
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
ip=($(echo "$ip" | tr '.' ' '))
[[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
stat=$?
fi
return $stat
}
function check_error() {
if [ $2 -ne 0 ]; then
case $1 in
'WGET') echo "Ошибка при скачивании файла $3"
[ -n "$3" ] && [ -f "$3" ] && rm "$3";;
'PACKAGE') echo "Ошибка при установке пакета $3";;
*) echo 'Ошибка';;
esac
echo 'Нажмите любую клавишу для выхода'
read -s -n1
exit 1
fi
}
function canon_unistall() {
if [ -f /usr/sbin/ccpdadmin ]; then
installed_model=$(ccpdadmin | grep LBP | awk '{print $3}')
if [ -n "$installed_model" ]; then
echo "Найден принтер $installed_model"
echo 'Остановка демона ccpd'
systemctl stop ccpd
echo 'Удаление принтера из файла настройки ccpd демона'
ccpdadmin -x $installed_model
echo 'Удаление принтера из CUPS'
lpadmin -x $installed_model
fi
fi
echo 'Удаление пакетов драйвера'
dnf remove cndrvcups-capt --assumeyes
dnf remove cndrvcups-common --assumeyes
echo 'Удаление неиспользуемых библиотек и пакетов'
dnf autoremove --assumeyes
echo 'Удаление правила'
[ -f /etc/udev/rules.d/85-canon-capt.rules ] && rm /etc/udev/rules.d/85-canon-capt.rules
echo 'Удаление завершено'
echo 'Снятие запрета на обновление модуля CUPS COMMON и CAPT'
sed -i "/exclude=cndrvcups-common cndrvcups-capt/d" /etc/dnf/dnf.conf
echo 'Нажмите любую клавишу для выхода'
read -s -n1
return 0
}
function canon_install() {
echo
PS3='Выбор принтера. Введите нужную цифру и нажмите Enter: '
select NAMEPRINTER in $NAMESPRINTERS
do
[ -n "$NAMEPRINTER" ] && break
done
echo "Выбран принтер: $NAMEPRINTER"
echo
PS3='Как принтер подключен к комьютеру? Введите нужную цифру и нажмите Enter: '
select CONECTION in 'Через разъем порта USB' 'Через разъем локальной сети (LAN, NET)'
do
if [ "$REPLY" == "1" ]; then
CONECTION="usb"
while true
do
#ищем подключенное к порту USB устройство
NODE_DEVICE=$(ls -1t /dev/usb/lp* 2> /dev/null | head -1)
if [ -n "$NODE_DEVICE" ]; then
#определяем серийный номер принтера
PRINTER_SERIAL=$(udevadm info --attribute-walk --name=$NODE_DEVICE | sed '/./{H;$!d;};x;/ATTRS{product}=="Canon CAPT USB \(Device\|Printer\)"/!d;' | awk -F'==' '/ATTRS{serial}/{print $2}')
#если серийный номер найден, значит найденное устройство принтер Canon
[ -n "$PRINTER_SERIAL" ] && break
fi
echo -ne "Включите принтер\r"
sleep 2
done
PATH_DEVICE="/dev/canon$NAMEPRINTER"
break
elif [ "$REPLY" == "2" ]; then
CONECTION="lan"
read -p 'Введите IP-адрес принтера: ' IP_ADDRES
until valid_ip "$IP_ADDRES"
do
echo 'Неверный формат IP-адреса, введите четыре десятичных числа значением'
echo -n 'от 0 до 255, разделённых точками: '
read IP_ADDRES
done
PATH_DEVICE="net:$IP_ADDRES"
echo 'Включите принтер и нажмите любую клавишу'
read -s -n1
sleep 5
break
fi
done
echo 'Установка драйвера'
COMMON_FILE=cndrvcups-common-${DRIVER_VERSION_COMMON}.${ARCH}.rpm
CAPT_FILE=cndrvcups-capt-${DRIVER_VERSION}.${ARCH}.rpm
if [ ! -f $COMMON_FILE ]; then
sudo -u $LOGIN_USER wget -O $COMMON_FILE ${URL_DRIVER[${ARCH}_common]}
check_error WGET $? $COMMON_FILE
fi
if [ ! -f $CAPT_FILE ]; then
sudo -u $LOGIN_USER wget -O $CAPT_FILE ${URL_DRIVER[${ARCH}_capt]}
check_error WGET $? $CAPT_FILE
fi
echo 'Установка общего модуля для драйвера CUPS'
dnf install ./$COMMON_FILE --assumeyes
check_error PACKAGE $? $COMMON_FILE
echo 'Установка модуля драйвера принтера CAPT'
dnf install ./$CAPT_FILE --assumeyes
check_error PACKAGE $? $CAPT_FILE
echo 'Установка запрета на обновление модуля CUPS COMMON и CAPT'
sed -i "$ a exclude=cndrvcups-common cndrvcups-capt" /etc/dnf/dnf.conf
#замена содержимого файла /etc/systemd/system/ccpd.service
echo '[Unit]
Description=CCPD Printing Daemon
Requires=cups.service
After=cups.service
[Service]
Type=forking
ExecStart=/usr/sbin/ccpd
TimeoutSec=5
[Install]
WantedBy=multi-user.target' > /etc/systemd/system/ccpd.service
echo 'Перезапуск CUPS'
systemctl restart cups
echo 'Установка принтера в CUPS'
/usr/sbin/lpadmin -p $NAMEPRINTER -P /usr/share/cups/model/CNCUPSLBP${LASERSHOT[$NAMEPRINTER]}CAPTK.ppd -v ccp://localhost:59687 -E
echo "Установка принтера $NAMEPRINTER, принтером, используемым по умолчанию"
/usr/sbin/lpadmin -d $NAMEPRINTER
echo 'Регистрация принтера в файле настройки ccpd демона'
/usr/sbin/ccpdadmin -p $NAMEPRINTER -o $PATH_DEVICE
#проверка установки принтера
installed_printer=$(ccpdadmin | grep $NAMEPRINTER | awk '{print $3}')
if [ -n "$installed_printer" ]; then
if [ "$CONECTION" == "usb" ]; then
echo 'Создание правила для принтера'
#составлем правило, которое обеспечит альтернативное имя (символическую ссылку) нашему принтеру, чтобы не зависить от меняющихся значений lp0,lp1, ...
echo 'KERNEL=="lp[0-9]*", SUBSYSTEMS=="usb", ATTRS{serial}=='$PRINTER_SERIAL', SYMLINK+="canon'$NAMEPRINTER'"' > /etc/udev/rules.d/85-canon-capt.rules
#обновляем правила
udevadm control --reload-rules
#проверка созданного правила
until [ -e $PATH_DEVICE ]
do
echo -ne "Выключите принтер, подождите 2 секунды, затем включите принтер\r"
sleep 2
done
fi
rm -f /etc/rc.d/init.d/ccpd
echo -e "\e[2KЗапуск ccpd"
systemctl daemon-reload
systemctl restart ccpd
#автозагрузка ccpd
systemctl enable ccpd
echo 'Установка завершена. Нажмите любую клавишу для выхода'
read -s -n1
exit 0
else
echo "Принтер $NAMEPRINTER не установлен"
echo 'Нажмите любую клавишу для выхода'
read -s -n1
exit 1
fi
}
function canon_help {
clear
echo 'Замечания по установке
Если вы уже делали какие-либо действия по установке принтера этой серии,
в текущей системе, то перед началом установки, следует отменить эти действия.
При отсутствии пакетов драйвера в папке скрипта они будут закачены автоматически.
Принтеры LBP-810, LBP-1210 подключайте через разъем порта USB
Для обновления драйвера сначала удаляете старую версию через скрипт, затем
устанавливаете новую также через скрипт.
Замечания и ошибки пишите на почту krylov__a@mail.ru
Для логирования процесса установки запускайте скрипт так:
logsave log.txt ./canon_lbp_setup.sh
Напомню: 1-установка; 2-удаление; 4-выход
'
}
clear
echo 'Установка драйвера Linux CAPT Printer Driver v'${DRIVER_VERSION}' для принтеров Canon LBP
на Rosa Desktop Fresh 32-битной и 64-битной архитектуры
Поддерживаемые принтеры:'
echo "$NAMESPRINTERS" | sed ':a; /$/N; s/\n/, /; ta' | fold -s
PS3='Выбор действия. Введите нужную цифру и нажмите Enter: '
select opt in 'Установка' 'Удаление' 'Справка' 'Выход'
do
if [ "$opt" == 'Установка' ]; then
canon_install
break
elif [ "$opt" == 'Удаление' ]; then
canon_unistall
break
elif [ "$opt" == 'Справка' ]; then
canon_help
elif [ "$opt" == 'Выход' ]; then
break
fi
done