mirror of
https://abf.rosa.ru/djam/rosa-canon-lbp.git
synced 2025-02-23 23:52:54 +00:00
267 lines
14 KiB
Bash
267 lines
14 KiB
Bash
|
#!/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
|