From 1b257f9da320fe144d730a065f343cce0c23f57e Mon Sep 17 00:00:00 2001 From: Lenar Shakirov Date: Mon, 27 Oct 2025 19:02:27 +0300 Subject: [PATCH] udev-config-printer.c: don't touch libusb alt setting for Samsung MFPs When connect Samsung ProXpress M3870FD udev-configure-printer try to alter usb settings by libusb_set_interface_alt_setting, but for most Samsung devices this causes a problem: https://blog.stuffedcow.net/2011/10/samsung-linux-cups-usb-printing/ https://github.com/apple/cups/issues/3965 https://github.com/OpenPrinting/cups/blob/master/backend/usb-libusb.c (search by "Samsung") --- udev/udev-configure-printer.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/udev/udev-configure-printer.c b/udev/udev-configure-printer.c index 5703c1af8..302ec6b8a 100644 --- a/udev/udev-configure-printer.c +++ b/udev/udev-configure-printer.c @@ -601,6 +601,9 @@ get_ieee1284_id_using_libusb (struct udev_device *dev, char libusbserial[1024]; char ieee1284_id[1024]; int got = 0; + unsigned long idVendorSamsung, idProductSamsung; + idVendorSamsung = strtoul("04E8", &end, 16); + idProductSamsung = strtoul("3460", &end, 16); idVendorStr = udev_device_get_sysattr_value (dev, "idVendor"); idProductStr = udev_device_get_sysattr_value (dev, "idProduct"); @@ -695,6 +698,12 @@ get_ieee1284_id_using_libusb (struct udev_device *dev, } m = altptr->bAlternateSetting; + if (idVendor == idVendorSamsung && idProduct == idProductSamsung) + { + syslog (LOG_DEBUG, "skip 'libusb_set_interface_alt_setting' for Samsung ProXpress M3870FD"); + } + else + { if (libusb_set_interface_alt_setting(handle, n, m) < 0) { @@ -703,6 +712,7 @@ get_ieee1284_id_using_libusb (struct udev_device *dev, syslog (LOG_DEBUG, "failed set altinterface"); continue; } + } memset (ieee1284_id, '\0', sizeof (ieee1284_id)); if (libusb_control_transfer(handle,