Skip to content

Enterprise

DadArcade edited this page Aug 19, 2026 · 12 revisions

Cupsie Enterprise Deployment Guide

1. Pushing Configuration

Administrators can push configurations using two primary methods depending on their device management infrastructure.

Method A: Deploying via Google Admin Console (Cloud-Managed Chrome)

  1. Sign in to the Google Admin Console.
  2. Navigate to Devices > Chrome > Apps & extensions > Users & browsers.
  3. Select the target Organizational Unit (OU) on the left.
  4. Click the yellow + button and select Add from Chrome Web Store or Add by extension ID.
  5. Search for/add Cupsie Corp (Extension ID: blocbkaedafljnkkmhmlhnlpokoajdjg).
  6. Set the Installation policy to Force install. This automatically installs the extension silently on user devices.
  7. Under the Policy for extensions text box, paste your JSON configuration.

    [!IMPORTANT] When deploying via the Admin Console, schema fields must be wrapped in a "Value" block:

{
  "cupsServers": {
    "Value": [
      "http://cups-server.internal:631"
    ]
  },
  "ippPrinters": {
    "Value": [
      {
        "url": "http://10.0.1.54:631/ipp/print",
        "name": "HQ 1st Floor Copier"
      },
      {
        "url": "http://10.0.1.55:631/ipp/print",
        "name": "HQ 2nd Floor Copier"
      }
    ]
  },
  "syncInterval": {
    "Value": 1440
  },
  "defaultRequestingUser": {
    "Value": "${user_name}"
  }
}
  1. Click Save in the top right.

Method B: Deploying via Local Managed Policy (Linux Workstations as an example)

For Linux workstations managed via config management tools (e.g. Ansible, Puppet), save a JSON policy file to /etc/opt/chrome/policies/managed/cupsie_policy.json.

Important

When using local 3rd-party policies, values are defined flat under the "3rdparty" extension block without the "Value" wrapper:

{
  "ExtensionSettings": {
    "blocbkaedafljnkkmhmlhnlpokoajdjg": {
      "installation_mode": "force_installed",
      "update_url": "https://clients2.google.com/service/update2/crx"
    }
  },
  "3rdparty": {
    "extensions": {
      "blocbkaedafljnkkmhmlhnlpokoajdjg": {
        "cupsServers": [
          "http://cups-server.internal:631"
        ],
        "ippPrinters": [
          {
            "url": "http://10.0.1.54:631/ipp/print",
            "name": "HQ 1st Floor Copier"
          },
          {
            "url": "http://10.0.1.55:631/ipp/print",
            "name": "HQ 2nd Floor Copier"
          }
        ],
        "syncInterval": 1440,
        "defaultRequestingUser": "${user_name}"
      }
    }
  }
}

For other OSes see the official Google documentation.


2. Policy Configuration Examples

Here are three examples of configurations formatted for deployment via the Google Admin Console (using the "Value" wrapper):

Example 1: Single CUPS Server

Just one CUPS HTTP server, with no other options configured.

{
  "cupsServers": {
    "Value": [
      "http://cups.domain.local:631"
    ]
  }
}

Example 2: Multiple CUPS Servers & Identity

Three HTTPS CUPS servers, with the dynamic identity placeholder and a 1400-minute sync interval.

{
  "cupsServers": {
    "Value": [
      "https://cups-emea.acme.com",
      "https://cups-apac.acme.com",
      "https://cups-americas.acme.com"
    ]
  },
  "syncInterval": {
    "Value": 1400
  },
  "defaultRequestingUser": {
    "Value": "${user_name}"
  }
}

Example 3: Standalone IPP Printers

No CUPS servers configured, but two direct IPP printers and a 600-minute sync interval.

{
  "ippPrinters": {
    "Value": [
      {
        "url": "http://10.0.5.10:631/ipp/print",
        "name": "Library Printer"
      },
      {
        "url": "http://10.0.5.11:631/ipp/print",
        "name": "Staff Room Copier"
      }
    ]
  },
  "syncInterval": {
    "Value": 600
  }
}

3. Policy Schema Reference

Administrators configure the extension behavior by defining values matching the schema (schema.json).

Policy Key Type Description
cupsServers Array of Strings A list of network CUPS server URLs/IPs (e.g., ["http://cups.domain.local:631"]).
ippPrinters Array of Objects Standalone IPP network printer endpoints. Each item must have a url (string) and an optional friendly name (string).
syncInterval Integer Background printer discovery poll interval in minutes (min: 1, max: 7200).
defaultRequestingUser String Overrides the username sent with IPP/CUPS request metadata. Supports ${user_name} placeholder.

4. How the Policy Works

For the Administrator

  1. Validation & Logging: When the extension performs a printer synchronization cycle, it automatically validates the incoming policy values. If any configured printer/server URL is malformed, or if syncInterval falls outside boundaries, the extension logs a detailed complaint in the background diagnostic logs.
  2. Connectivity Diagnostics: If any of the pushed CUPS servers or printers are offline or unreachable, the background script writes an error log: Server/Printer is unreachable: <Resource> is unreachable. Error: <Details> This allows the administrator to check user diagnostic logs to verify network routes and printer availability.

For the End User

  1. Zero Configuration: Once the extension is pushed, it is silently installed. The configured CUPS queues and standalone printers instantly appear in the native Chrome print destination selector (Ctrl + P / Cmd + P).
  2. Configuration Display: On the extension Options page, managed configurations are displayed in read-only input blocks marked with a (Managed by Policy) badge. Users cannot delete or edit these settings.
  3. Coexistence: Users can still add their own personal CUPS servers or standalone printers. Personal settings are saved in chrome.storage.sync and merge/coexist alongside the enterprise-managed configuration.

5. Overview of Enterprise Architecture

  • Default Host Permissions: Cupsie declares default host permissions for *://*. Users never receive permissions prompts upon installation or server configuration.
  • Auto-Identity Resolution: If not overridden by policy, the extension queries the user's active Chrome Profile using the identity API, extracts their username from the profile email (e.g., bob from bob@company.com), and uses it to negotiate printing authorization on CUPS servers. Administrators can explicitly embed this resolved username in the defaultRequestingUser field using the "${user_name}" placeholder (e.g. "prefix_${user_name}").
  • Managed Precedence: Enterprise configuration settings loaded from Chrome Managed Storage override or take precedence over the user's manual settings.

6. Username Detection (${user_name})

The defaultRequestingUser policy setting supports the dynamic placeholder ${user_name} to automatically resolve and inject each logged-in user's identity into print job metadata.

How Resolution Works

  1. Profile Identity Lookup: The extension queries the active Chrome user profile via Chrome's chrome.identity API (getProfileUserInfo).
  2. Email Prefix Extraction: It extracts the prefix from the signed-in profile email address before the @ symbol:
    • jane.doe@company.com $\rightarrow$ jane.doe
    • alex_smith@org.net $\rightarrow$ alex_smith
  3. Template Substitution: All instances of ${user_name} are dynamically replaced with the extracted username. Custom prefixes or suffixes can also be included in policy:
    • "${user_name}" $\rightarrow$ "jane.doe"
    • "corp_${user_name}" $\rightarrow$ "corp_jane.doe"
    • "${user_name}_print" $\rightarrow$ "jane.doe_print"
  4. Fallback Mechanism: If the user is not signed into a Chrome profile, or if profile information is unavailable, the extension safely falls back to "Chrome User".
  5. IPP Header Injection: The resolved username is automatically set as the requesting-user-name attribute in IPP binary protocol payloads sent to CUPS print servers and network printers, enabling accurate user-level logging and quota enforcement.