首页
学习
活动
专区
工具
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接口来设置屏幕相关属性了。

12.1K70

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 开发请参阅

    18210

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

    10.1K4617

    我的ROS2开发环境

    但是安装的依赖可能更新本机中的一些配置或软件版本,导致过去可以运行的软件这么折腾一下后就不能再运行了。 这时可能又后悔又懊恼。严重的可能要重新安装电脑系统。...本文描述了一种在Docker环境中开发和调试ROS程序的方法。旨在解决环境配置和软件依赖给我们带来的困扰。 我们使用Docker+Vscode来构建开发环境。...所以在vscode中的文件浏览器中src目录的文件是灰色显示的。并且vscode中的git工具也会忽略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。

    66040

    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 等都不支持,除非开发者手工编写。

    92150

    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官方论坛或社区以获取更多支持。

    2.3K00

    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 —— 视图对象知道如何在屏幕上绘制自己以及如何响应用户的输入。比如说layout中的xml文件,也可以自定义控件,反正是看得见的对象,就是视图对象。...C —— 控制对象含有应用的逻辑单元,是视图与模型对象的联系纽带。通常是Activity、Fragment 或 Service 的一个子类。...这些是与密度无关的资源。无论当前屏幕的密度是多少,系统都不会缩放以此限定符标记的资源。 tvdpi:适用于密度介于 mdpi 和 hdpi 之间的屏幕(约 213dpi)的资源。...dp 是一个虚拟像素单位,1 dp 约等于中密度屏幕(160dpi;“基准”密度)上的 1 像素。对于其他每个密度,Android 会将此值转换为相应的实际像素数。

    1.1K31

    Snap, AppImage和 Flatpak之间差异

    它是用C编程开发的,提供了在Linux发行版上安装应用程序的一种快速和直接的方法。 Flatpak的工作原理是将一个应用程序组合并编译成一个包。此前,Flatpak被称为xdg-app。...这个特定的框架使用了在沙箱环境中运行应用程序而不需要根特权的概念。因此,一些flatpak应用程序不能访问和利用系统的全部资源。...要更新AppImage包,您需要在下载文件时查看提供的更新指南。您也可以使用AppImage Updater或下载新版本的应用程序。...Permission controls 大多数Linux应用程序需要访问系统中的不同资源,以提供最大的性能。幸运的是,这些包格式允许您设置这些权限,并决定应用程序访问什么和不应该访问什么。...要获取系统上所有Flatpak包的列表,请执行以下命令: flatpak list Copy AppImage 在写这篇文章的时候,AppImage还没有为用户提供分配和删除权限的方法。

    7.8K31

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

    在 CefSharp 中,如果 CEF 或 C++/CLI 绑定内部出现问题,这将导致整个 .NET 应用程序崩溃而无法处理这种情况。...因此,桌面应用程序应具备 DPI 感知功能,才能在高 DPI 显示器(DPI 比例设置大于 100% 的显示器)上正确运行。...在初始化过程中,它会检查当前进程的 DPI 感知,并为相应的 Chromium 引擎设置匹配的 DPI 感知。因此,无需让您的应用程序显式识别 DPI 以避免在高 DPI 显示上呈现伪影。...您无需预先安装 Microsoft Visual C++ Runtime 即可使用 DotNetBrowser。 支持和更新 CefSharp 是一个开源项目。...它也不能用于暗示在单独的 AppDomain(如 VSTO)中运行代码的环境。对于其他一些情况,例如播放使用专有编解码器编码的内容,您必须自己构建、更新和维护 CEF。

    57320
    领券