UPDATE 2026-07-17: Added a script to automate the download and patching. You can either trust it, ignore it, or read it and then decide if you trust it 🙂
UPDATE 2026-03-12: Added instructions for macOS Tahoe.
If you have an HP LaserJet P1102, HP LaserJet Pro P1102, HP LaserJet Pro P1102w or, if there exists one, an HP LaserJet Pro P1102w printer, and you are on an updated macOS Sequoia (> 15.0) or macOS Tahoe (> 26.0), HP official drivers won't install. As I am under no circumstance going to buy a new printer when this one works perfectly (on Windows 10/11), it turns out you can tweak the installer to bypass the operating version check, and the latest published drivers work fine.
Step-by-step guide (source):
Common steps:
- Download the official HP Mac Printer Driver
- Extract the
HewlettPackardPrinterDrivers.pkgfile from theHewlettPackardPrinterDrivers.dmgfile. - From a terminal, and in the folder where you extracted the
.pkgfile:pkgutil --expand HewlettPackardPrinterDrivers.pkg drivers.
Then, for macOS Sequoia:
- Open the
drivers/Distributionfile with any text editor, and change the fragment that sayssystem.version.ProductVersion, '15.0'tosystem.version.ProductVersion, '16.0'. Save the changes. - From the terminal:
pkgutil --flatten drivers HewlettPackardPrinterDrivers-sequoia.pkg. - Delete the
driversfolder, and theHewlettPackardPrinterDrivers.dmg&HewlettPackardPrinterDrivers.pkgfiles. - The file
HewlettPackardPrinterDrivers-sequoia.pkgis, from now on, your new and ready to use installer.
Alternatively, for macOS Tahoe:
- Open the
drivers/Distributionfile with any text editor, and change the fragment that sayssystem.version.ProductVersion, '15.0'tosystem.version.ProductVersion, '27.0'. Save the changes. - From the terminal:
pkgutil --flatten drivers HewlettPackardPrinterDrivers-tahoe.pkg. - Delete the
driversfolder, and theHewlettPackardPrinterDrivers.dmg&HewlettPackardPrinterDrivers.pkgfiles. - The file
HewlettPackardPrinterDrivers-tahoe.pkgis, from now on, your new and ready to use installer.
If you want a simpler, automated version, here is a shell script that will patch for up to, and including, macOS Tahoe. Just follow the instructions mentioned at the beginning of the file contents. You can also download the patch file from this GitHub Gist:
#!/usr/bin/env bash
#
# Downloads the official HP Printer Driver installer and patches its OS version gate,
# so it installs on macOS releases newer than Sequoia (15.x), e.g. Tahoe (26.x).
#
# Instructions:
# 1. save the whole contents as a new file, e.g. patch-hp-printer-driver.sh
# 2. make it executable. From a terminal, in the same folder where you saved it: chmod +x patch-hp-printer-driver.sh
# 3. run it: ./patch-hp-printer-driver.sh
# 4. The script will notify about the the patched installer (saved in the same folder). You can then run it to install the drivers.
#
set -euo pipefail
readonly DOWNLOAD_URL="https://ftp.hp.com/pub/softlib/software12/HP_Quick_Start/osx/Applications/ASU/HewlettPackardPrinterDrivers.dmg"
readonly DMG_NAME="HewlettPackardPrinterDrivers.dmg"
readonly PKG_NAME="HewlettPackardPrinterDrivers.pkg"
readonly EXPANDED_DIR="drivers"
readonly PATCHED_PKG="HewlettPackardPrinterDrivers-patched.pkg"
readonly ORIGINAL_VERSION="15.0"
readonly PATCHED_VERSION="27.0"
readonly MAX_SUPPORTED_MAJOR=15
WORK_DIR="$(pwd)"
MOUNT_POINT=""
cleanup() {
if [[ -n "$MOUNT_POINT" && -d "$MOUNT_POINT" ]]; then
hdiutil detach "$MOUNT_POINT" -quiet -force >/dev/null 2>&1 || true
fi
}
trap cleanup EXIT
check_os_version() {
local os_version major
os_version="$(sw_vers -productVersion)"
major="${os_version%%.*}"
echo "Detected macOS version: $os_version"
if (( major < MAX_SUPPORTED_MAJOR )); then
echo "This OS version is already supported by the official installer. Patch not needed."
return 1
fi
echo "This OS version (macOS $major) is newer than the installer's supported version ($ORIGINAL_VERSION). Patch needed."
local patched_major="${PATCHED_VERSION%%.*}"
if (( major > patched_major )); then
echo "Warning: macOS $major is newer than the patched version ceiling ($PATCHED_VERSION). The patched installer's version check may still reject this OS."
fi
return 0
}
download_dmg() {
if [[ -f "$WORK_DIR/$DMG_NAME" ]]; then
echo "$DMG_NAME already exists, skipping download."
return
fi
echo "Downloading HP Printer Driver..."
curl -fSL -o "$WORK_DIR/$DMG_NAME" "$DOWNLOAD_URL"
}
extract_pkg_from_dmg() {
echo "Mounting $DMG_NAME..."
MOUNT_POINT="$(mktemp -d /tmp/hp-driver-mount.XXXXXX)"
hdiutil attach "$WORK_DIR/$DMG_NAME" -nobrowse -quiet -mountpoint "$MOUNT_POINT"
local src_pkg
src_pkg="$(find "$MOUNT_POINT" -maxdepth 2 -name "$PKG_NAME" -print -quit)"
if [[ -z "$src_pkg" ]]; then
echo "Error: could not find $PKG_NAME inside the mounted image." >&2
exit 1
fi
echo "Extracting $PKG_NAME..."
cp "$src_pkg" "$WORK_DIR/$PKG_NAME"
hdiutil detach "$MOUNT_POINT" -quiet
rmdir "$MOUNT_POINT"
MOUNT_POINT=""
}
patch_pkg() {
echo "Expanding $PKG_NAME..."
rm -rf "$WORK_DIR/$EXPANDED_DIR"
pkgutil --expand "$WORK_DIR/$PKG_NAME" "$WORK_DIR/$EXPANDED_DIR"
local distribution_file="$WORK_DIR/$EXPANDED_DIR/Distribution"
if [[ ! -f "$distribution_file" ]]; then
echo "Error: Distribution file not found at $distribution_file" >&2
exit 1
fi
echo "Patching version check ($ORIGINAL_VERSION -> $PATCHED_VERSION)..."
sed -i '' "s/system\.version\.ProductVersion, '$ORIGINAL_VERSION'/system.version.ProductVersion, '$PATCHED_VERSION'/" "$distribution_file"
echo "Flattening patched package..."
rm -f "$WORK_DIR/$PATCHED_PKG"
pkgutil --flatten "$WORK_DIR/$EXPANDED_DIR" "$WORK_DIR/$PATCHED_PKG"
}
cleanup_intermediate_files() {
echo "Cleaning up intermediate files..."
rm -rf "$WORK_DIR/$EXPANDED_DIR"
}
main() {
local needs_patch=1
check_os_version || needs_patch=0
if [[ $needs_patch -eq 0 ]]; then
echo "Nothing to do."
exit 0
fi
download_dmg
extract_pkg_from_dmg
patch_pkg
cleanup_intermediate_files
echo "Done. Patched installer ready at: $WORK_DIR/$PATCHED_PKG"
}
main
This tiny hack will probably work with other printer models and installers, and probably future operating system releases, until Apple introduces an incompatible change.