首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在C程序中从X11获取更新的系统DPI信息?

在C程序中,可以通过使用Xlib库来从X11获取更新的系统DPI信息。以下是一个示例代码,展示了如何实现这一功能:

代码语言:txt
复制
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>

int main() {
    Display *display;
    Window root;
    Atom dpiAtom;
    int dpi;

    // 打开与X服务器的连接
    display = XOpenDisplay(NULL);
    if (display == NULL) {
        fprintf(stderr, "无法打开X服务器连接\n");
        return 1;
    }

    // 获取根窗口
    root = DefaultRootWindow(display);

    // 获取DPI原子属性
    dpiAtom = XInternAtom(display, "_XDPI", False);
    if (dpiAtom == None) {
        fprintf(stderr, "无法获取DPI原子属性\n");
        return 1;
    }

    // 获取DPI值
    Atom actualType;
    int actualFormat;
    unsigned long itemCount, bytesAfter;
    unsigned char *data = NULL;
    int status = XGetWindowProperty(display, root, dpiAtom, 0, 1, False, XA_CARDINAL,
                                    &actualType, &actualFormat, &itemCount, &bytesAfter, &data);
    if (status != Success || actualType == None) {
        fprintf(stderr, "无法获取DPI值\n");
        return 1;
    }

    dpi = *((int*)data);

    // 释放资源
    XFree(data);
    XCloseDisplay(display);

    // 打印DPI值
    printf("系统DPI值:%d\n", dpi);

    return 0;
}

这段代码中,我们首先使用XOpenDisplay函数打开与X服务器的连接,然后使用DefaultRootWindow函数获取根窗口。接下来,我们使用XInternAtom函数获取DPI原子属性的标识符。然后,我们使用XGetWindowProperty函数获取根窗口的DPI属性值,并将其存储在data变量中。最后,我们释放资源并打印DPI值。

请注意,这段代码仅适用于X11窗口系统。在其他窗口系统中,获取系统DPI的方法可能会有所不同。

推荐的腾讯云相关产品:腾讯云云服务器(CVM),产品介绍链接地址:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux桌面系统屏幕信息获取

Linux桌面系统屏幕信息获取(Qt、X11、Xrandr、Xinerma) ​ 最近在项目测试,发现了关于Qt - UI分辨率自适应问题。大小屏幕互相切换问题。也引发了关于屏幕检测问题。...(DPI)自适应 QT 使用全局缩放进行全分辨率适配 注意:在实际使用测试大分辨率切换到小分辨率,DPI不应是按照比例缩放。...Qt Qt自身获取屏幕分辨率,主要还是在 QApp初始化后获取,在这主要提一下DPI值得获取。一些方案DPI计算在初始化之后进行。...在实际DPI获取只需要,主屏分辨率获取或者当前屏幕分辨率获取还有DPI值得获取,实际参与计算是逻辑DPI,即 screen->logicalDotsPerInch(),分辨率使用有效分辨率 screen...即在后来项目放弃了这一方法。 错误情况猜测,Qt毕竟属于C++接口,属于上层应用接口。并不如X11这些C接口直接调用来准确。以后劲量避免使用Qt接口来设置屏幕相关属性了。

12K70
  • python之把HTML文件转换成PDF格式文档

    --cookie-jar提供JAR文件读写cookie数据 --copies设置输出副本数量(默认主1),其实为1就够了 -d, --dpi指定一个要分辨率(这在 X11 系统并没有什么卵用...占用空间更小 -h, --help 显示帮助信息 --htmldoc 输出程序html帮助文档 --image-dpi当页面中有内嵌图片时, 会下载此命令行参数指定尺寸图片(默认值是 600...PDF/PS ,能够很好节约最终生成文档所占存储空间 --manpage 输出程序手册页-B, --margin-bottom设置页面的 底边距-L, --margin-left设置页面的...-q, --quiet 静态模式,不在标准输出打印任何信息 --read-args-from-stdin 标准输入读取命令行参数,后续会有针对此指令详细介绍, 请参见 **标准输入获取参数...** --readme 输出程序 readme 文档 --title生成PDF文档标题,如果不指定则使用第一个文档标题 -V, --version 输出版本信息后退出 2、实现代码 import

    2.2K20

    dotnet X11 设置窗口鼠标触摸命中穿透

    本文记录如何在 X11 应用里面,使用 XShapeCombineRegion 方法配置一个 X11 窗口支持和 Win32 窗口一样命中测试穿透功能,即对应 Win32 WS_EX_TRANSPARENT...为了可能坑点在于 libXfixes.so 可能在某些系统上被砍掉。...pull origin 67cd9188399e7f45bfe83e1af9daf10236b3171c 以上使用是 gitee 源,如果 gitee 不能访问,请替换为 github 源。...获取代码之后,进入 DikalehebeekaJaqunicobo 文件夹,即可获取到源代码 以上代码经过我在 UOS 系统上测试通过,在 UOS 上 KWin_X11 能够符合预期工作 运行代码提示找不到...github 和 gitee 上,欢迎拉取代码阅读和构建 参考文档: 如何在屏幕上显示一局部透明、鼠标点击可穿过窗口 - V2EX 2021-08-21窗口管理器杂谈 - 简书 更多 X11 开发请参阅

    16210

    svlib文档翻译(第一至四章)

    通过这些函数可以查询文件属性,“这个文件存在吗”,“文件最后修改日期是什么”,“是否拥有写权限”,“它是一个目录”和许多其他属性。 第九章介绍了操作系统查询函数。...通过这些函数可以轻松地获取当前时间和日期,以各种人类可读格式呈现日期,获取操作系统环境变量,以字符串队列形式获取目录内容,并读取计时器。 第十章讨论如何在svlib处理错误。...代码,已经打包成一个svlib_pkg,使用前需要用编译器编译svlib_pkg.sv文件 C代码,通过systemverilog DPI调用,包含了多个库,目前打包成了一个文件dpi/svlib_dpi.c...要使用svlib,必须编译svlib_pkg.sv和dpi/svlib_dpi.c。...尤其是函数调用C库时,在C可能存在内存分配、文件权限甚至文件存在等问题。这样错误总是被传回到SystemVerilog中进行处理,但是错误处理具体斜街在某种程度上是由程序员控制

    1.4K40

    X 随笔

    人机交互到用户界面,GUI到窗口系统,进而到X 系统X 系统设计思想,到Xserver和Xclient以及X11协议,一直到窗口管理器乃至wayland。温故知新,那就从用户界面开始吧!...X Client不用标准 C 函数来获取输入,而是接收事件,然后根据事件类型发生分支,执行适当响应。传统程序是由程序控制,在确定时间查询确定类型输入。...程序角度看,一个事件可以包含很多信息: 应用程序获取信息,比如用户输入、其他客户端传来有用信息。 其他客户端想知道你应用程序正在做一些事情,比如将可用文本传输给第三方客户端。...X11实现有许多种,其中用C语言实现函数库Xlib提供了直接访问协议原语,提供了信息交换能力。 X.11.3共有120多个请求,且具有可扩充性,描述了客户与服务器进程通信结构、语法及语义。...与X情况一样,客户端在接收到事件时会作为响应更新用户界面。但是,在Wayland,渲染发生客户端,并且客户端只是向合成器发送请求以指示已更新区域。

    1.1K10

    【5分钟玩转Lighthouse】Python绘制图表

    建立支持X11 FowardingSSH连接 在SSH会话实现X11 Forwarding需要SSH服务器端和客户端都支持,目前较新发行版系统SSH服务器端配置都是默认支持。...X11起源于1984年,前身是MITAthena项目,它采用Client/Server架构,使得用户可以仅仅通过网络终端即可使用各种输入(键盘/鼠标)输出(显示器)设备来访问使用主机上GUI程序...在现代Linux系统,X server服务为系统提供相对底层图形用户界面的支持,很多Linux桌面窗口系统也都建立在X11之上。...注意:以上命令在Linux发行版(Ubuntu/Fedora/Mint等)桌面下可以直接运行。但如果是非Linux桌面系统,需要安装对应支持运行本地X服务X11工具。...若要结束程序,关闭窗口或Ctrl+C均可。

    9.9K4617

    ROS2开发环境

    但是安装依赖可能更新本机一些配置或软件版本,导致过去可以运行软件这么折腾一下后就不能再运行了。 这时可能又后悔又懊恼。严重可能要重新安装电脑系统。...本文描述了一种在Docker环境开发和调试ROS程序方法。旨在解决环境配置和软件依赖给我们带来困扰。 我们使用Docker+Vscode来构建开发环境。...所以在vscode文件浏览器src目录文件是灰色显示。并且vscodegit工具也会忽略src目录git信息。...在Docker运行GUI应用 devcontainer.json runArgs 字段添加 --volume=/tmp/.X11-unix:/tmp/.X11-unix 表示挂载 x11 相关目录到容器...xhost + 然后就可以在Docker运行GUI应用了(:Rviz2和Gazebo)。

    1.3K00

    将浏览器嵌入 .NET 应用程序:DotNetBrowser 还是 CefSharp?

    在 DotNetBrowser 默认禁用专有编解码器。可以通过编程方式启用它们,而无需重建库。 安全 Chromium 通过利用操作系统为它们提供安全性来限制其渲染器和实用程序进程。...在初始化过程,它会检查当前进程 DPI 感知,并为相应 Chromium 引擎设置匹配 DPI 感知。因此,无需让您应用程序显式识别 DPI 以避免在高 DPI 显示上呈现伪影。...例如,以下是如何在 DotNetBrowser 网页上执行相同操作: 因此,在 DotNetBrowser 与网页执行复杂交互要方便得多。...您无需预先安装 Microsoft Visual C++ Runtime 即可使用 DotNetBrowser。 支持和更新 CefSharp 是一个开源项目。...它也不能用于暗示在单独 AppDomain( VSTO)运行代码环境。对于其他一些情况,例如播放使用专有编解码器编码内容,您必须自己构建、更新和维护 CEF。

    54740

    Windows 下DPI 应用开发(UWP WPF Windows Forms Win32)

    虽然屏幕 DPI 值已经更新,并且已向应用窗口发送了 Dpi Change 消息,但系统 DPI 值依然没变。应用必须处理 Dpi Change 消息才会正常渲染。...现在,你可以通过在设置打开一个开关,使得无需注销,只要重新打开应用即可让此应用获取到最新系统 DPI 值。...无感知 (Unaware) DPI 值就是一个常量 96。 如果在系统设置缩放,那么就会采用位图拉伸(会模糊)。 更多信息请看本文末尾故事。...而 Per-Monitor V1 和 Per-Monitor V2 支持在操作系统级别是兼容,所以只需要修改 WPF 应用程序清单即可兼容第二代屏幕级 DPI 感知。...其他 UI 框架 原生 Win32 是支持最新 DPI 感知,其他 GDI/GDI+/MFC 等都不支持,除非开发者手工编写。

    86350

    kali linux 开机无法进入图形化界面

    X11配置问题:X11是Linux系统上常用图形化显示系统,配置不正确可能导致图形界面无法启动。更新问题:最新系统更新可能引入了一些兼容性问题,导致图形界面无法启动。解决方案1....使用以下命令检查X11配置文件内容:plaintextCopy codecat /etc/X11/xorg.conf确保配置文件包含正确设备和驱动程序信息。...如果文件内容不正确,您可以编辑该文件并手动添加正确配置信息。然后,重新启动系统以使更改生效。3. 回滚系统更新如果问题在最近系统更新后出现,并且您怀疑更新引入了兼容性问题,您可以尝试回滚系统更新。...# 编辑X11配置文件sudo nano /etc/X11/xorg.conf# 在文件添加正确设备和驱动程序信息# 例如:Section "Device" Identifier "Card0...首先检查显卡驱动是否正确安装,然后检查X11配置文件,最后考虑回滚系统更新。如果问题仍然存在,请参考Kali Linux官方论坛或社区以获取更多支持。

    2K00

    xshell怎么配置_winedt使用教程

    目录 一、 XShell作用 二、 下载免费版XShell 三、 安装XShell 四、使用XShell连接Linux服务器 一、 XShell作用 XShell 是一种流行且简单网络程序...XShell可以在Windows界面下来访问远端不同系统服务器,从而比较好达到远程控制终端目的。...二、 下载XShell Xshell免费版官网下载地址:https://www.xshell.com/zh/free-for-home-school/ 官网打不开,可以网盘下载 链接:https:/...邮箱复制链接下载 三、 安装XShell 1. 双击运行XShell安装文件,并点击“下一步” 2. 点击“我接受许可证协议条款”,点击“下一步” 3....本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.6K10

    《Android编程权威指南》之Android与MVC篇

    ,编译器会自动主构造函数根据所有声明属性提取以下函数: equals() / hashCode() toString() 格式 "User(name=John, age=42)" componentN...V —— 视图对象知道如何在屏幕上绘制自己以及如何响应用户输入。比如说layoutxml文件,也可以自定义控件,反正是看得见对象,就是视图对象。...C —— 控制对象含有应用逻辑单元,是视图与模型对象联系纽带。通常是Activity、Fragment 或 Service 一个子类。...这些是与密度无关资源。无论当前屏幕密度是多少,系统都不会缩放以此限定符标记资源。 tvdpi:适用于密度介于 mdpi 和 hdpi 之间屏幕(约 213dpi资源。...dp 是一个虚拟像素单位,1 dp 约等于密度屏幕(160dpi;“基准”密度)上 1 像素。对于其他每个密度,Android 会将此值转换为相应实际像素数。

    1.1K31

    Java后端:html转pdf实战笔记

    3、wkhtmltopdf 参数介绍常规选项 –allow 允许加载指定文件夹文件或文件(可重复) –book* 设置一会打印一本书时候,通常设置选项 –collate 打印多份副本时整理...,使像素/ DPI比没有不变 –disallow-local-file-access 禁止允许转换本地文件读取其他本地文件,除非explecitily允许用 –allow –dpi 显式更改DPI(这对基于...X11系统没有任何影响) –enable-plugins 启用已安装插件(Flash –encoding 设置默认文字编码 –extended-help 显示更广泛帮助,详细介绍了不常见命令开关...PDF文件标题(第一个文档标题使用,如果没有指定) –toc* 插入内容文件开头 –use-xserver* 使用X服务器(一些插件和其他东西没有X11可能无法正常工作) –user-style-sheet...指定用户样式表,加载在每一页 –username HTTP认证用户名 –version 输出版本信息退出 –zoom 使用这个缩放因子 (default 1)页眉和页脚选项 –header-center

    4.4K61
    领券