Я пытаюсь устранить проблему с печатью, но сначала мне нужно описать мою среду (это немного нестандартно) .
У меня есть USB-принтер HP 1102, подключенный к системе Ubuntu 20.04, которая запускает CUPS и использует принтер совместно с другими системами в локальной сети. Печать из других систем (Ubuntu 18.04, Ubuntu 20.04, Windows 10) отлично работает через IPP.
У меня есть клиент, работающий под управлением Android 10, и поверх него Linux Deploy с Linux 18.04 в chroot в той же локальной сети. В системе linux есть XFCE и CUPS, и я настроил принтер так же, как и для других систем.
Когда я пытаюсь напечатать (с локальными чашками, настроенными на отладку), вот что я получаю для своей работы:
D [25/Nov/2020:10:12:01 +0200] [Job 8] Connecting to 192.168.1.13:631
D [25/Nov/2020:10:12:01 +0200] [Job 8] Connecting to printer.
D [25/Nov/2020:10:12:01 +0200] [Job 8] Connection error: Permission denied
E [25/Nov/2020:10:12:01 +0200] [Job 8] The printer is not responding.
D [25/Nov/2020:10:12:31 +0200] [Job 8] Connecting to 192.168.1.13:631
D [25/Nov/2020:10:12:31 +0200] [Job 8] Connecting to printer.
D [25/Nov/2020:10:12:31 +0200] [Job 8] Connection error: Permission denied
E [25/Nov/2020:10:12:31 +0200] [Job 8] The printer is not responding.
Я выполняю захват пакетов на стороне сервера cups, и нет пакетов, когда он говорит, что это пытаюсь подключиться к принтеру. Подключение вручную ( telnet 192.168.1.13 631
открывает сокет и TCP-соединение работает).
Должно быть, что-то не так внутри CUPS, запущенного на Android Linux chroot, но я не могу понять, что именно. Локальное задание печати выглядит нормально, права доступа к файлам для каталога / var / spool / cups выглядят нормально, cups работает от имени пользователя root.
Я не знаю, где искать дальнейшие способы устранения неполадок ...
Я смотрю android logcat, пытаясь понять, есть ли проблема в то же время, и вот оно:
11-25 10:28:29.179 2980 3091 W Netd : No subsystem found in netlink event
11-25 10:28:31.012 20789 20789 I printers.cgi: type=1400 audit(0.0:785): avc: denied { ioctl } for path="socket:[151451]" dev="sockfs" ino=151451 ioctlcmd=0x8933 scontext=u:r:magisk:s0 tcontext=u:r:magisk:s0 tclass=unix_dgram_socket permissive=1
Итак - я думаю, cups пытается создать сокет, а android это отрицает? Есть идеи, если это файловый сокет, как его называть и где он будет расположен в файловой системе?
Есть предложения?
Мне удалось найти решение моей проблемы. Мне удалось обойти CUPS в Linux (работает поверх Android) и подключить систему к удаленному серверу чашек (на котором размещен принтер в моей локальной сети).
Мне пришлось добавить файл /etc/cups/client.conf
со следующим содержимым:
AllowAnyRoot Yes
AllowExpiredCerts Yes
Encryption IfRequested
ServerName 192.168.1.13:631
192.168.1.13 работает на моем реальном сервере CUPS. Теперь печать работает из chroot Linux под Android!