You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Linux下通过libcups编程获取当前打印机名称?

获取Linux系统默认打印机(基于libcups)

你可以通过两种方式获取默认打印机:

1. 在现有打印机列表中识别默认项

cups_dest_t结构体包含一个is_default字段,当该字段值非0时,对应的打印机就是系统默认打印机。修改你的代码如下:

#include <cups/cups.h>
#include <QStringList>

QStringList getPrinters(QString *defaultPrinterName = nullptr)
{    
   QStringList printerNames;
   cups_dest_t *dests;
   int num_dests = cupsGetDests(&dests);
   for (int pr = 0; pr < num_dests; ++pr) {
      QString printerName = QString::fromUtf8(dests[pr].name);
      printerNames.append(printerName);
      // 检查是否为默认打印机
      if (dests[pr].is_default && defaultPrinterName) {
          *defaultPrinterName = printerName;
      }
   }
   cupsFreeDests(num_dests, dests);
   return printerNames;
}

调用时可传入QString指针接收默认打印机名称:

QString defaultPrinter;
QStringList allPrinters = getPrinters(&defaultPrinter);
if (!defaultPrinter.isEmpty()) {
    // 处理默认打印机逻辑
}

2. 直接获取默认打印机

如果不需要全部打印机列表,用cupsGetDest函数直接获取默认打印机效率更高:

#include <cups/cups.h>
#include <QString>

QString getDefaultPrinter()
{
    cups_dest_t *dest = cupsGetDest(nullptr, nullptr, 0, nullptr);
    if (!dest) {
        return QString();
    }
    QString defaultName = QString::fromUtf8(dest->name);
    cupsFreeDests(1, dest);
    return defaultName;
}

关键点说明

  • cups_dest_t.is_default:非0值表示该打印机是系统默认项
  • cupsGetDest参数说明:
    • 第一个参数:传nullptr表示查找默认打印机
    • 第二个参数:传nullptr忽略打印机实例限制
    • 第三个参数:固定传0
    • 第四个参数:传nullptr可忽略错误代码

内容的提问来源于stack exchange,提问作者Helg1980

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:54:40