gpt4 book ai didi

linux - 以编程方式确定 Linux 中的各个屏幕宽度/高度(使用 Xinerama、TwinView 和/或 BigDesktop)

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:17 29 4
gpt4 key购买 nike

我正在开发一个小副项目,以便在 GNOME 下的多个屏幕上显示多个壁纸(这显然是 GNOME 本身或其他任何东西都无法完成的)。我已经弄清楚如何完成它的主要部分(出于好奇,使用 ImageMagick 组件);我正在尝试自动化配置系统。

为此,我需要一种方法来确定各个屏幕的尺寸。谁能给我提示在哪里寻找它?我认为 X 服务器本身有该信息,但我不确定我的程序如何请求它。

最佳答案

看起来有一个 libXinerama API 可以检索该信息。不过我还没有找到任何详细信息。

一般 X.org 编程信息可以在 here 找到(PDF 文件)。有关 libXinerama 提供的函数的信息可以找到 here (联机帮助页副本,其中信息不多)。

这是一个小型 C++ 程序,我从这些引用文献中编写了它,用于检索连接到 Xinerama 的每个显示器的尺寸和偏移量。它也适用于 nVidia TwinView;我目前没有 ATI 卡可以在他们的 BigDesktop 系统上测试它,但我怀疑它也可以在该系统上运行。

#include <cstdlib>
#include <iostream>

#include <X11/extensions/Xinerama.h>

using std::cout;
using std::endl;

int main(int argc, char *argv[]) {
bool success=false;
Display *d=XOpenDisplay(NULL);
if (d) {
int dummy1, dummy2;
if (XineramaQueryExtension(d, &dummy1, &dummy2)) {
if (XineramaIsActive(d)) {
int heads=0;
XineramaScreenInfo *p=XineramaQueryScreens(d, &heads);
if (heads>0) {
for (int x=0; x<heads; ++x)
cout << "Head " << x+1 << " of " << heads << ": " <<
p[x].width << "x" << p[x].height << " at " <<
p[x].x_org << "," << p[x].y_org << endl;
success=true;
} else cout << "XineramaQueryScreens says there aren't any" << endl;
XFree(p);
} else cout << "Xinerama not active" << endl;
} else cout << "No Xinerama extension" << endl;
XCloseDisplay(d);
} else cout << "Can't open display" << endl;

return (success ? EXIT_SUCCESS : EXIT_FAILURE);
}

关于linux - 以编程方式确定 Linux 中的各个屏幕宽度/高度(使用 Xinerama、TwinView 和/或 BigDesktop),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22569444/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com