pantum-universal-driver 1.1.186-5

seededverified· maintained by osguot· LicenseRef-Pantum

Universal printer and scanner driver for Pantum devices

baa2796c557f→ 75e5e90b30f0 · 9 files changed

.SRCINFO

modified +1615 -617
diff --git a/.SRCINFO b/.SRCINFO
index a115939..d48f202 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,15 +1,41 @@
 pkgbase = pantum-universal-driver
-	pkgdesc = Universal driver for Pantum printers
-	pkgver = 1.1.167
-	pkgrel = 1
+	pkgdesc = Universal printer and scanner driver for Pantum devices
+	pkgver = 1.1.186
+	pkgrel = 4
 	url = https://global.pantum.com/support/
-	install = pantum-universal-driver.install
 	arch = x86_64
-	license = custom
+	license = LicenseRef-Pantum
 	depends = cups
-	optdepends = ipp-usb: for IPP over USB support
-	noextract = pantum-universal-driver-1.1.167-1.zip
-	source = pantum-universal-driver-1.1.167-1.zip::https://github.com/osguot/pantum-universal-driver/releases/download/release/Pantum.Linux.Driver.V1_1_167.zip
-	sha256sums = 680a0b3534cd5411207b48382a2c2d266cb86c6c65d6ac0eec5430df00594e09
+	depends = libcups
+	depends = cups-filters
+	depends = ghostscript
+	depends = sane
+	depends = libusb
+	depends = libjpeg-turbo
+	depends = zlib
+	depends = libgcc
+	depends = libstdc++
+	provides = pantum-driver=1.1.186
+	conflicts = pantum-driver
+	noextract = pantum-universal-driver-1.1.186.zip
+	options = !strip
+	backup = etc/sane.d/pantum6500.conf
+	backup = etc/sane.d/pantum_bm2400.conf
+	backup = etc/sane.d/pantum_bm4200.conf
+	backup = etc/sane.d/pantum_bm5200.conf
+	backup = etc/sane.d/pantum_bm5230.conf
+	backup = etc/sane.d/pantum_mfp.conf
+	backup = etc/sane.d/dll.d/pantum6500
+	backup = etc/sane.d/dll.d/pantum_bm2400
+	backup = etc/sane.d/dll.d/pantum_bm4200
+	backup = etc/sane.d/dll.d/pantum_bm5200
+	backup = etc/sane.d/dll.d/pantum_bm5230
+	backup = etc/sane.d/dll.d/pantum_mfp
+	source = pantum-universal-driver-1.1.186.zip::https://drivers.pantum.in/userfiles/files/download/%E9%A9%B1%E5%8A%A8%E6%96%87%E4%BB%B6/4020/%E6%AC%A7%E6%B4%B2%E5%AD%90%E7%AB%99%E9%80%82%E9%85%8D%E8%8D%B7%E5%85%B0%E8%AF%AD20260520/Pantum%20Linux%20Driver%20V1_1_186.zip
+	source = pantum-ipp-usb.conf
+	source = fix-pantum-ppd.awk
+	sha256sums = ce28c1f42e3c6a642cd49af3d6827b63ad4f0484b2151f0594470a1746828a45
+	sha256sums = b24a64ae11b9e3b5eb1e5da608b38592b8131644be48e2e8d75d9491750aa6f5
+	sha256sums = 262d88bd34188a401fae2599ed8ac255236cec3b7d86fd22618fcf0f46a11f4e
 
 pkgname = pantum-universal-driver

PKGBUILD

modified +9959 -6047
diff --git a/PKGBUILD b/PKGBUILD
index 6342883..570e58a 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -9,31 +9,31 @@
 # BM2200FW    BM2200N     BM2200NW    BM2200W     BM2300     BM2300A     BM2300ANW
 # BM2300AW    BM2300NW    BM2300W     BM2301W     BM2303W    BM2312NW    BM2316W
 # BM2318NW    BM2336W     BM2345W     BM2400      BM2400A    BM2400ANW   BM2400NW
-# BM2408      BM2408A     BM2408ANW   BM2408NW    BM2460     BM2460A     BM2460ANW
-# BM2460NW    BM4000ADN   BM4000ADW   BM4000FDN   BM4000FDW  BM4005ADN   BM4005FDN
-# BM4100FDN   BM4100FDW   BM4200AD    BM4200ADN   BM4200ADW  BM4200D     BM4200DN
-# BM4200DW    BM4208AD    BM4208ADN   BM4208D     BM4208DN   BM4208DW    BM4210ADN
-# BM4210ADW   BM4210DW    BM4240ADW   BM4248ADW   BM4300ADW  BM4308ADW   BM4310ADN
-# BM4310ADW   BM5100ADN   BM5100ADW   BM5100FDN   BM5100FDW  BM5105ADN   BM5105FDN
-# BM5106ADN   BM5106ADW   BM5106FDN   BM5106FDW   BM5110ADN  BM5110ADW   BM5140ADN
-# BM5200ADN   BM5200ADW   BM5205ADN   BM5205ADW   BM5208ADN  BM5208ADW   BM5230ADN
-# BM5230ADW   BM5237ADN   BM5237ADW
+# BM2460      BM2460A     BM2460ANW   BM2460NW    BM4000ADN  BM4000ADW   BM4000FDN
+# BM4000FDW   BM4005ADN   BM4005FDN   BM4100FDN   BM4100FDW  BM4200AD    BM4200ADN
+# BM4200ADW   BM4200D     BM4200DN    BM4200DW    BM4208AD   BM4208ADN   BM4208D
+# BM4208DN    BM4208DW    BM4210ADN   BM4210ADW   BM4210DW   BM4240ADW   BM4248ADW
+# BM4300ADW   BM4308ADW   BM4310ADN   BM4310ADW   BM5100ADN  BM5100ADW   BM5100FDN
+# BM5100FDW   BM5105ADN   BM5105FDN   BM5106ADN   BM5106ADW  BM5106FDN   BM5106FDW
+# BM5110ADN   BM5110ADW   BM5200ADN   BM5200ADW   BM5205ADN  BM5205ADW   BM5208ADN
+# BM5208ADW   BM5210ADN   BM5210ADW   BM5218ADN   BM5218ADW  BM5220ADN   BM5220ADW
+# BM5225ADN   BM5225ADW   BM5230ADN   BM5230ADW   BM5237ADN  BM5237ADW   BM5285ADN
+# BM5300ADN   BM5300ADW
 #
 # === BP Series ================================================================
 #
 # BP1800      BP1800W     BP2100      BP2100N     BP2100NW   BP2100W     BP2200
 # BP2200N     BP2200NW    BP2200W     BP2300      BP2300NW   BP2300W     BP2301W
 # BP2303W     BP2312NW    BP2316W     BP2318NW    BP2320NW   BP2336W     BP2345W
-# BP2400      BP2400NW    BP2408      BP2408NW    BP2460     BP2460NW    BP4000DN
+# BP2400      BP2400NW    BP2460      BP2460NW    BP4000DN
 # BP4000DW    BP4005DN    BP4200D     BP4200DN    BP4200DW   BP4208D     BP4208DN
 # BP4208DW    BP4210DN    BP4210DW    BP5100DN    BP5100DW   BP5101DN    BP5105DN
-# BP5106DN    BP5106DW    BP5126DN    BP5140DN    BP5200DN   BP5200DW    BP5208DN
+# BP5106DN    BP5106DW    BP5126DN    BP5200D     BP5200DN   BP5200DW    BP5208DN
 # BP5208DW    BP5230DN    BP5230DW    BP5237DN    BP5237DW
 #
 # === CM Series ================================================================
 #
-# CM1100      CM1100ADN   CM1100ADW   CM1100DN    CM1100DW   CM1100FDW   CM230ADN
-# CM230ADW    CM230DN
+# CM1100      CM1100ADN   CM1100ADW   CM1100DN    CM1100DW   CM1100FDW
 #
 # === CP Series ================================================================
 #
@@ -46,14 +46,15 @@
 # === M Series =================================================================
 #
 # M118DW      M15DW       M29DW       M5100       M5200       M5300       M6200
-# M6200N      M6200NW     M6200W      M6500       M6500N      M6500NW     M6500W
+# M6200N      M6200NW     M6200W      M6500       M6500N      M6500NW     M6500NW+
 # M6503       M6503NW     M6507N      M6518NW     M6535NW     M6550       M6550N
-# M6550NW     M6550W      M6568NW     M6595NW     M6600       M6600N      M6600NW
+# M6550NW     M6550NW+    M6550W      M6568NW     M6595NW     M6600       M6600N
+# M6600NW
 # M6600W      M6602W      M6700D      M6700DN     M6700DW     M6700DW+    M6708D
 # M6708DN     M6708DW     M6710DW+    M6760D      M6760DW     M6760DW+    M6768DW
 # M6770DW+    M6789DW+    M6800FDW    M6860FDN    M6860FDW    M7000D      M7000DW
 # M7010DN     M7100D      M7100DN     M7100DW     M7100DW+    M7108DN     M7108DW
-# M7140DN     M7160DW     M7160DW+    M7170DW     M7189DW+    M7200FD     M7200FDN
+# M7160DW     M7160DW+    M7170DW     M7189DW+    M7200FD     M7200FDN
 # M7200FDW    M7300FDN    M7300FDW    M7310DN     M7310DW     M7312DN     M7312DW
 # M7318DN     M7318DW
 #
@@ -64,13 +65,13 @@
 # === P Series =================================================================
 #
 # P1000       P2000       P2200       P2200NW     P2200W      P2210       P2210W
-# P2300       P2300W      P2500       P2500N      P2500NW     P2500W      P2503
-# P2503W      P2510       P2510W      P2517       P2518NW     P2535NW     P2550
+# P2300       P2300W      P2500       P2500N      P2500NW     P2500W      P2500W+
+# P2503       P2503W      P2510       P2510W      P2517       P2518NW     P2535NW
 # P2550N      P2595NW     P2600       P2600N      P2600NW     P2650       P2650N
 # P3000       P3007D      P3007DW     P3010D      P3010DW     P3010DW+    P3020D
 # P3020DWS    P3030D      P3060D      P3060DW     P3100       P3300       P3300DN
 # P3300DW     P3300DW+    P3307DN     P3308DN     P3308DW     P3320D      P3320DWS
-# P3340DN     P3500D      P3500DN     P3500DNT    P3500DW     P3508DN
+# P3500D      P3500DN     P3500DNT    P3500DW     P3508DN
 #
 # === S Series =================================================================
 #
@@ -79,52 +80,154 @@
 # ==============================================================================
 
 pkgname=pantum-universal-driver
-pkgver=1.1.167
-pkgrel=1
-pkgdesc="Universal driver for Pantum printers"
+pkgver=1.1.186
+pkgrel=4
+pkgdesc="Universal printer and scanner driver for Pantum devices"
 arch=('x86_64')
 url="https://global.pantum.com/support/"
-license=('custom')
-depends=('cups')
-optdepends=('ipp-usb: for IPP over USB support')
+license=('LicenseRef-Pantum')
+depends=(
+    'cups'
+    'libcups'
+    'cups-filters'
+    'ghostscript'
+    'sane'
+    'libusb'
+    'libjpeg-turbo'
+    'zlib'
+    'libgcc'
+    'libstdc++'
+)
+provides=("pantum-driver=${pkgver}")
+conflicts=('pantum-driver')
+options=('!strip')
 
 # Auxiliary variables
 _zipver="${pkgver//./_}"
-_zipname="Pantum.Linux.Driver.V${_zipver}.zip"
-_debname="pantum_${pkgver}-${pkgrel}_amd64.deb"
+_debrel=1
+_debname="pantum_${pkgver}-${_debrel}_amd64.deb"
 _foldername="Pantum Linux Driver V${pkgver}"
+_download_url='https://drivers.pantum.in/userfiles/files/download'
+_download_path='%E9%A9%B1%E5%8A%A8%E6%96%87%E4%BB%B6/4020/%E6%AC%A7%E6%B4%B2%E5%AD%90%E7%AB%99%E9%80%82%E9%85%8D%E8%8D%B7%E5%85%B0%E8%AF%AD20260520'
 
-install=pantum-universal-driver.install
+backup=(
+    'etc/sane.d/pantum6500.conf'
+    'etc/sane.d/pantum_bm2400.conf'
+    'etc/sane.d/pantum_bm4200.conf'
+    'etc/sane.d/pantum_bm5200.conf'
+    'etc/sane.d/pantum_bm5230.conf'
+    'etc/sane.d/pantum_mfp.conf'
+    'etc/sane.d/dll.d/pantum6500'
+    'etc/sane.d/dll.d/pantum_bm2400'
+    'etc/sane.d/dll.d/pantum_bm4200'
+    'etc/sane.d/dll.d/pantum_bm5200'
+    'etc/sane.d/dll.d/pantum_bm5230'
+    'etc/sane.d/dll.d/pantum_mfp'
+)
 
-source=("${pkgname}-${pkgver}-${pkgrel}.zip::https://github.com/osguot/pantum-universal-driver/releases/download/release/${_zipname}")
-sha256sums=('680a0b3534cd5411207b48382a2c2d266cb86c6c65d6ac0eec5430df00594e09')
-noextract=("${pkgname}-${pkgver}-${pkgrel}.zip")
+source=(
+    "${pkgname}-${pkgver}.zip::${_download_url}/${_download_path}/Pantum%20Linux%20Driver%20V${_zipver}.zip"
+    'pantum-ipp-usb.conf'
+    'fix-pantum-ppd.awk'
+)
+sha256sums=(
+    'ce28c1f42e3c6a642cd49af3d6827b63ad4f0484b2151f0594470a1746828a45'
+    'b24a64ae11b9e3b5eb1e5da608b38592b8131644be48e2e8d75d9491750aa6f5'
+    '262d88bd34188a401fae2599ed8ac255236cec3b7d86fd22618fcf0f46a11f4e'
+)
+noextract=("${pkgname}-${pkgver}.zip")
 
 prepare() {
-    # Extract DEB-file
-    bsdtar -x -f "$srcdir/${pkgname}-${pkgver}-${pkgrel}.zip" "${_foldername}/Resources/${_debname}"
-
-    # Move DEB-file
-    mv "${_foldername}/Resources/${_debname}" .
+    bsdtar -xOf "$srcdir/${pkgname}-${pkgver}.zip" \
+        "${_foldername}/Resources/${_debname}" > "${_debname}"
+    bsdtar -xOf "$srcdir/${pkgname}-${pkgver}.zip" \
+        "${_foldername}/Resources/locale/en_US.UTF-8/license.txt" > EULA
+    bsdtar -xOf "$srcdir/${pkgname}-${pkgver}.zip" \
+        "${_foldername}/Resources/locale/en_US.UTF-8/privacy.txt" > PRIVACY
 }
 
 package() {
-    # Extract data.tar.xz from DEB-file
-    ar p "${_debname}" data.tar.xz | tar -xJ -C "$pkgdir"
+    bsdtar -xOf "${_debname}" data.tar.xz | \
+        bsdtar --no-same-owner -xpf - -C "$pkgdir"
+
+    # Debian ships duplicate SANE files in /usr/local, which packages must not own.
+    rm -rf "$pkgdir/usr/local"
+
+    # Use Arch's native SANE library directory.
+    install -d "$pkgdir/usr/lib/sane"
+    mv "$pkgdir/usr/lib/x86_64-linux-gnu/sane/"* "$pkgdir/usr/lib/sane/"
+    rmdir "$pkgdir/usr/lib/x86_64-linux-gnu/sane" \
+        "$pkgdir/usr/lib/x86_64-linux-gnu"
+
+    # Vendor udev rules belong in /usr, not in the administrator-owned /etc.
+    install -d "$pkgdir/usr/lib/udev/rules.d"
+    mv "$pkgdir/etc/udev/rules.d/"*.rules "$pkgdir/usr/lib/udev/rules.d/"
+    rmdir "$pkgdir/etc/udev/rules.d" "$pkgdir/etc/udev"
+
+    # Do not make USB devices world-writable. Members of lp retain access, and
+    # libsane_matched lets Arch's 70-uaccess.rules grant an ACL to active users.
+    sed -i \
+        -e 's/MODE="0666", OWNER="root", GROUP="lp"/GROUP="lp", MODE="0664"/g' \
+        -e '/^LABEL="mud_rules_end"$/d' \
+        "$pkgdir/usr/lib/udev/rules.d/"*.rules
+
+    # The bundled ipp-usb fork conflicts with Arch's supported ipp-usb package.
+    rm -rf "$pkgdir/opt/pantum/ippfilter" "$pkgdir/opt/pantum/{lib}"
+    install -Dm644 "$srcdir/pantum-ipp-usb.conf" \
+        "$pkgdir/usr/share/ipp-usb/quirks/pantum.conf"
 
-    # Remove unnecessary folder
-    rm -rf "$pkgdir/${_foldername}"
+    # V1.1.186 PPDs still reference these filters, omitted from the vendor DEB.
+    ln -s rastertoPantum "$pkgdir/usr/lib/cups/filter/BM2400"
+    ln -s rastertoPantum "$pkgdir/usr/lib/cups/filter/BP2400"
 
-    # Move libs from usr/lib/x86_64-linux-gnu to usr/lib
-    if [ -d "$pkgdir/usr/lib/x86_64-linux-gnu" ]; then
-        mkdir -p "$pkgdir/usr/lib"
-        mv "$pkgdir/usr/lib/x86_64-linux-gnu"/* "$pkgdir/usr/lib/" 2>/dev/null || true
-        rmdir "$pkgdir/usr/lib/x86_64-linux-gnu" 2>/dev/null || true
+    # Normalize invalid JCL UI blocks and let Pantum's PDF filters consume
+    # standard PDF directly, avoiding a failing bannertopdf/pdftopdf chain.
+    local ppd ppd_count=0 original_valid
+    while IFS= read -r -d '' ppd; do
+        ppd_count=$((ppd_count + 1))
+        original_valid=false
+        if cupstestppd -q -I filters -W none "$ppd"; then
+            original_valid=true
+        fi
+
+        awk -f "$srcdir/fix-pantum-ppd.awk" "$ppd" > "$ppd.fixed"
+
+        if $original_valid &&
+            ! cupstestppd -q -I filters -W none "$ppd.fixed"; then
+            printf 'PPD normalization broke a valid file: %s\n' \
+                "${ppd#$pkgdir/}" >&2
+            return 1
+        fi
+
+        awk -f "$srcdir/fix-pantum-ppd.awk" "$ppd.fixed" \
+            > "$ppd.checked"
+        if ! cmp -s "$ppd.fixed" "$ppd.checked"; then
+            printf 'PPD normalization is not idempotent: %s\n' \
+                "${ppd#$pkgdir/}" >&2
+            return 1
+        fi
+
+        rm "$ppd.checked"
+        mv "$ppd.fixed" "$ppd"
+    done < <(find "$pkgdir/usr/share/cups/model/Pantum" -type f \
+        -name '*.ppd' -print0)
+
+    if ((ppd_count == 0)); then
+        printf '%s\n' 'No Pantum PPD files found in the vendor package' >&2
+        return 1
     fi
 
-    # License stuff
-    if [ -f "$pkgdir/usr/share/doc/pantum/copyright" ]; then
-        install -Dm644 "$pkgdir/usr/share/doc/pantum/copyright" \
-            "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
+    if grep -R -E '^\*cupsFilter:.*application/vnd\.cups-pdf.*(ptps|phase2filter)' \
+        "$pkgdir/usr/share/cups/model/Pantum" >/dev/null; then
+        printf '%s\n' 'Unnormalized Pantum PDF filter declarations remain' >&2
+        return 1
     fi
+
+    install -Dm644 EULA "$pkgdir/usr/share/licenses/$pkgname/EULA"
+    install -Dm644 PRIVACY "$pkgdir/usr/share/licenses/$pkgname/PRIVACY"
+    install -Dm644 "$pkgdir/usr/share/doc/pantum/copyright" \
+        "$pkgdir/usr/share/licenses/$pkgname/copyright"
+    install -Dm644 "$pkgdir/usr/share/doc/pantum/changelog.gz" \
+        "$pkgdir/usr/share/doc/$pkgname/changelog.gz"
+    rm -rf "$pkgdir/usr/share/doc/pantum"
 }

pantum-universal-driver.install

removed +0 -1523
diff --git a/pantum-universal-driver.install b/pantum-universal-driver.install
deleted file mode 100644
index 6f7cd85..0000000
--- a/pantum-universal-driver.install
+++ /dev/null
@@ -1,54 +0,0 @@
-post_install() {
-
-    RULES_DIR="/usr/lib/udev/rules.d/"
-    SERVICE_DIR="/usr/lib/systemd/system/"
-    IPP_FILTER_DIR="/opt/pantum/ippfilter"
-    PANTUM_BIN_DIR="/opt/pantum/bin"
-
-    IPPUSB_RULES="$IPP_FILTER_DIR/71-ipp-usb.rules"
-    IPPUSB="$IPP_FILTER_DIR/ipp-usb"
-    IPPUSB_SERVICE="$IPP_FILTER_DIR/pt-ipp-usb.service"
-
-    # Check ipp-usb service
-    IPPUSB_EXIST=0
-    if [ -f /usr/lib/udev/rules.d/71-ipp-usb.rules ] && \
-    [ -f /usr/lib/systemd/system/ipp-usb.service ] && \
-    [ -f /usr/bin/ipp-usb ]; then
-        IPPUSB_EXIST=1
-    fi
-
-    echo "ipp-usb: $IPPUSB_EXIST"
-
-    # Processing ipp-usb
-    if [ $IPPUSB_EXIST -eq 1 ]; then
-        cp "$IPPUSB_RULES" "$RULES_DIR"
-        cp "$IPPUSB_SERVICE" "$SERVICE_DIR"
-
-        # Copy ipp-usb into /opt/pantum/bin/
-        mkdir -p "$PANTUM_BIN_DIR"
-        cp "$IPPUSB" "$PANTUM_BIN_DIR/"
-        chmod 755 "$PANTUM_BIN_DIR/ipp-usb"
-
-        systemctl daemon-reload
-        udevadm control --reload
-
-        # Check ipp-usb service status
-        IPPUSB_SERVICE_IS_ACTIVE=$(systemctl is-active ipp-usb)
-        if [ "$IPPUSB_SERVICE_IS_ACTIVE" = "active" ]; then
-            systemctl stop ipp-usb
-            systemctl start pt-ipp-usb
-        fi
-    fi
-
-    # Reload udev rules and activate for USB-device
-    udevadm control --reload-rules
-    udevadm trigger --subsystem-match=usb
-
-    echo "Pantum driver ${pkgver} installed successfully!"
-    echo "Restarting CUPS service..."
-    systemctl restart cups.service
-}
-
-post_upgrade() {
-    post_install
-}

.gitignore

added +39 -0
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..55d8a92
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+/src/
+/pkg/
+/*.zip
+/*.deb
+/*.pkg.tar.*

LICENSE

added +660 -0
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..87358a1
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,12 @@
+Copyright (C) 2026 Ivan Burmin <osguot@vivaldi.net>
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.

LICENSES/0BSD.txt

added +660 -0
diff --git a/LICENSES/0BSD.txt b/LICENSES/0BSD.txt
new file mode 100644
index 0000000..87358a1
--- /dev/null
+++ b/LICENSES/0BSD.txt
@@ -0,0 +1,12 @@
+Copyright (C) 2026 Ivan Burmin <osguot@vivaldi.net>
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.

REUSE.toml

added +266 -0
diff --git a/REUSE.toml b/REUSE.toml
new file mode 100644
index 0000000..6a08ff4
--- /dev/null
+++ b/REUSE.toml
@@ -0,0 +1,13 @@
+version = 1
+
+[[annotations]]
+path = [
+    ".SRCINFO",
+    ".gitignore",
+    "PKGBUILD",
+    "fix-pantum-ppd.awk",
+    "pantum-ipp-usb.conf",
+]
+precedence = "aggregate"
+SPDX-FileCopyrightText = "2026 Ivan Burmin <osguot@vivaldi.net>"
+SPDX-License-Identifier = "0BSD"

fix-pantum-ppd.awk

added +800 -0
diff --git a/fix-pantum-ppd.awk b/fix-pantum-ppd.awk
new file mode 100644
index 0000000..d220156
--- /dev/null
+++ b/fix-pantum-ppd.awk
@@ -0,0 +1,47 @@
+function flush_ui_block() {
+    if (!in_ui_block)
+        return
+
+    if (has_jcl_setup) {
+        sub(/^\*OpenUI /, "*JCLOpenUI ", ui_block)
+        sub(/\n\*CloseUI:/, "\n*JCLCloseUI:", ui_block)
+    }
+
+    printf "%s", ui_block
+    ui_block = ""
+    in_ui_block = 0
+    has_jcl_setup = 0
+}
+
+/^\*cupsFilter:/ &&
+/application\/vnd\.cups-pdf/ &&
+/(ptps|phase2filter)"[[:space:]]*$/ {
+    sub(/application\/vnd\.cups-pdf/, "application/pdf")
+    print
+    next
+}
+
+/^\*OpenUI / {
+    flush_ui_block()
+    in_ui_block = 1
+    ui_block = $0 ORS
+    next
+}
+
+in_ui_block {
+    ui_block = ui_block $0 ORS
+
+    if ($0 ~ /^\*OrderDependency:.*[[:space:]]JCLSetup[[:space:]]/)
+        has_jcl_setup = 1
+
+    if ($0 ~ /^\*CloseUI:/)
+        flush_ui_block()
+
+    next
+}
+
+{ print }
+
+END {
+    flush_ui_block()
+}

pantum-ipp-usb.conf

added +103 -0
diff --git a/pantum-ipp-usb.conf b/pantum-ipp-usb.conf
new file mode 100644
index 0000000..a86ee23
--- /dev/null
+++ b/pantum-ipp-usb.conf
@@ -0,0 +1,3 @@
+# The proprietary Pantum driver needs direct access to Pantum USB devices.
+[232b:*]
+  blacklist = true

← Back to the package catalog

Connection lost

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin. Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session. Please retry or reload the page.