Настройка печати с Yandex Cloud Desktop на локальный принтер в Linux
Важно
Часть ресурсов, необходимых для прохождения практического руководства, доступны только в регионе Россия.
Это руководство поможет настроить печать файлов из Yandex Cloud Desktop на принтер, подключенный к локальной машине под управлением Linux. Решение основано на использовании общего каталога: задания на печать из облачной среды сохраняются в общий каталог, а локальная система перехватывает их и направляет на физический принтер.
Примечание
В руководстве приведен пример подключения виртуального принтера для печати в PDF-файл. Чтобы распечатывать на принтере, который подключен к вашей локальной машине (серверу), добавьте этот принтер в сервере печати CUPSprinter-driver-cups-pdf, настройка /etc/cups/cups-pdf.conf и создание каталога /tmp/cups-pdf-output, а также раздел проверки PDF-файлов.
Чтобы настроить печать с рабочего стола Cloud Desktop на локальном принтере в Linux:
- Подготовьте облако к работе.
- Подготовьте инфраструктуру.
- Настройте локальную машину.
- Настройте рабочий стол.
- Проверьте результат.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входят:
- Плата за использование вычислительных ресурсов, дисков и исходящий трафик рабочего стола (см. тарифы Yandex Cloud Desktop).
- Плата за время использования NAT-шлюза и исходящий через него трафик (см. тарифы Yandex Virtual Private Cloud).
Подготовьте инфраструктуру
Если у вас еще нет рабочего стола, создайте его:
- Создайте сеть и подсеть для рабочего стола.
- Настройте NAT-шлюз для рабочего стола.
- Создайте группу рабочих столов. При создании выберите образ с ОС на базе Linux, например Ubuntu 20.04.
- Создайте рабочий стол.
Настройте локальную машину
Настройте локальную машину для приема файлов с рабочего стола.
-
Установите необходимые инструменты:
- Утилиту inotify-tools
. - Сервер печати CUPS
. - Пакет printer-driver-cups-pdf — для проверки печати на виртуальном принтере PDF. Для настройки физического принтера установите драйвер этого принтера.
- Пакет Samba
.
Для этого выполните команды:
sudo apt update sudo apt install inotify-tools cups printer-driver-cups-pdf samba - Утилиту inotify-tools
-
Создайте общий каталог
/srv/printdropи настройте к нему доступ:sudo mkdir -p /srv/printdrop sudo chown lp:lp /srv/printdrop sudo chmod 0770 /srv/printdropКаталог предназначен для обмена файлами между рабочим столом и локальной машиной.
-
Настройте Samba:
-
Откройте файл
/etc/samba/smb.conf:sudo nano /etc/samba/smb.conf -
Добавьте код в конце файла:
[printdrop] path = /srv/printdrop browseable = yes writable = yes guest ok = yes force user = lp force group = lp create mask = 0660 directory mask = 0770
-
-
Настройте CUPS:
-
Откройте файл
/etc/cups/cups-pdf.conf:sudo nano /etc/cups/cups-pdf.conf -
Найдите строку
Out ${HOME}/PDFили#Out ${HOME}/PDFи замените ее на следующую:Out /tmp/cups-pdf-output
-
-
Создайте каталог
/tmp/cups-pdf-outputи настройте к нему доступ:sudo mkdir -p /tmp/cups-pdf-output sudo chown lp:lp /tmp/cups-pdf-output sudo chmod 755 /tmp/cups-pdf-outputКаталог предназначен для хранения файлов, отправленных на печать.
Примечание
Для физического принтера не надо настраивать
/etc/cups/cups-pdf.confи/tmp/cups-pdf-output. Добавьте принтер в CUPS через интерфейс администрированияhttp://localhost:631, выбрав Administration → Add Printer или командойlpadmin. Затем узнайте имя очереди (имя физического принтера) командойlpstat -p. -
Настройте сервис для слежения за общим каталогом:
-
Создайте файл
print-watcher.sh:sudo nano /usr/local/bin/print-watcher.sh -
Вставьте код в файл
print-watcher.sh:#!/bin/bash WATCH_DIR="/srv/printdrop" PRINTER="PDF" # локально установленный принтер USER="lp" # пользователь, для которого инициируется печать inotifywait -m -e close_write,moved_to --format '%w%f' "$WATCH_DIR" | while read FILE; do if [[ "${FILE,,}" == *.pdf ]]; then lp -U "$USER" -d "$PRINTER" "$FILE" && rm -f "$FILE" fi doneПримечание
Для физического принтера в параметре PRINTER="PDF" вместо PDF укажите имя физического принтера (имя очереди).
-
Сделайте файл исполняемым:
sudo chmod +x /usr/local/bin/print-watcher.sh -
Создайте сервисный файл
print-watcher.service:sudo nano /etc/systemd/system/print-watcher.service -
Вставьте код в файл
print-watcher.service:[Unit] Description=Watch printdrop and print files [Service] ExecStart=/usr/local/bin/print-watcher.sh Restart=always User=lp Group=lp [Install] WantedBy=multi-user.target
-
-
Активируйте службу и перезапустите сервисы печати и обмена файлами:
sudo systemctl daemon-reload sudo systemctl restart cups sudo systemctl restart smbd sudo systemctl enable --now print-watcher.serviceРезультат:
Created symlink /etc/systemd/system/multi-user.target.wants/print-watcher.service → /etc/systemd/system/print-watcher.service. -
Проверьте работу сервиса, выполнив команду:
systemctl status print-watcher.serviceРезультат:
● print-watcher.service - Watch printdrop and print files Loaded: loaded (/etc/systemd/system/print-watcher.service; enabled; preset: enabled) Active: active (running) since ... ... -
Сохраните публичный IPv4-адрес вашей локальной машины. Вы можете узнать его, например, с помощью сервиса Яндекс Интернетометр
. Этот адрес потребуется для монтирования общего каталога на рабочем столе.
Настройте рабочий стол
Настройте рабочий стол для отправки файлов на локальную машину.
-
Подключитесь к рабочему столу.
-
Установите сервер CUPS и пакет cifs-utils:
sudo apt update sudo apt install cups sudo apt-get install cifs-utils -
Настройте бэкенд для виртуального принтера:
-
Создайте файл
/usr/lib/cups/backend/printdrop:sudo nano /usr/lib/cups/backend/printdrop -
Вставьте код в файл:
#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin if test "$#" = "0"; then echo 'file printdrop:/printdrop "PrintDrop" "/printdrop"' exit 0 fi DROP_DIR="/home/<имя_пользователя_стола>/printdrop" mkdir -p /tmp/cups-shared JOBFILE="$6" # если CUPS передал файл как аргумент TS=$(date +%s)-$RANDOM OUT="$DROP_DIR/job-$TS.pdf" SHARED_OUT="/tmp/cups-shared/job-$TS.pdf" if [ -n "$JOBFILE" ] && [ -f "$JOBFILE" ]; then cp "$JOBFILE" "$SHARED_OUT" chmod -R 777 /tmp/cups-shared sudo -u <имя_пользователя_стола> /usr/local/bin/copy-as-user.sh "$SHARED_OUT" "$OUT" else cat - > "$SHARED_OUT" sudo -u <имя_пользователя_стола> /usr/local/bin/copy-as-user.sh "$SHARED_OUT" "$OUT" fiУкажите имя пользователя рабочего стола, от имени которого вы будете отправлять файлы на печать.
-
Настройте доступ к файлу:
sudo chmod 755 /usr/lib/cups/backend/printdrop sudo chown root:root /usr/lib/cups/backend/printdrop
-
-
Настройте доступ к общему каталогу:
-
Создайте файл
/usr/local/bin/copy-as-user.sh:sudo nano /usr/local/bin/copy-as-user.sh -
Вставьте код вспомогательного скрипта:
#!/bin/bash mv "$1" "$2.tmp" mv "$2.tmp" "$2" -
Настройте доступ к файлу:
sudo chmod +x /usr/local/bin/copy-as-user.sh sudo chown root:root /usr/local/bin/copy-as-user.sh -
Настройте права:
sudo visudo -
В конце открывшегося файла вставьте строку:
lp ALL=(<имя_пользователя_стола>) NOPASSWD: /usr/local/bin/copy-as-user.shУкажите имя пользователя рабочего стола, от имени которого вы будете отправлять файлы на печать.
-
-
Создайте виртуальный принтер и активируйте его:
sudo lpadmin -p DropPrinter -E -v printdrop:/printdrop sudo cupsenable DropPrinter sudo cupsaccept DropPrinterВ результате появится сообщение о добавлении нового принтера.
-
Создайте каталог для монтирования общего каталога:
sudo mkdir -p ~/printdrop -
Смонтируйте общий каталог:
sudo mount -t cifs //<IP-адрес_локальной_машины>/printdrop ~/printdrop -o guest,uid=$(id -u),gid=$(id -g)Укажите сохраненный ранее IPv4-адрес.
Проверьте результат
Чтобы проверить результат, отправьте на печать PDF-файл.
-
На рабочем столе создайте или скачайте
любой PDF-файл. -
На рабочем столе отправьте на печать PDF-файл, выбрав созданный виртуальный принтер.
В результате отобразится сообщение о поступлении файла в очередь печати.
-
На локальной машине проверьте очередь печати виртуального принтера PDF.
Диагностика ошибок
Для диагностики воспользуйтесь следующими командами на локальной машине.
-
Посмотреть логи CUPS, связанные с получением заданий на печать:
sudo tail -n 10 /var/log/cups/access_logРезультат:
... localhost - - [15/Nov/2025:21:55:01 +0000] "POST /printers/PDF HTTP/1.1" 200 394 Create-Job successful-ok localhost - - [15/Nov/2025:21:55:01 +0000] "POST /printers/PDF HTTP/1.1" 200 408591 Send-Document successful-ok -
Посмотреть логи ошибок CUPS:
sudo tail -n 10 /var/log/cups/error_logПодобные записи сообщают об ошибках:
... W [15/Nov/2025:21:55:01 +0000] [Job 34] Backend cups-pdf returned status 5 (cancel job) -
Посмотреть PDF-файлы, созданные виртуальным принтером:
sudo ls -l /tmp/cups-pdf-output/Результат:
total 472 -rw------- 1 lp lp 239840 Nov 17 19:37 job-1763408227-8471-job_2.pdf ...
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
При необходимости удалите подсети, сеть и группу рабочих столов.