- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发一个小副项目,以便在 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/
在尝试启动并运行基本的“Hello World”之类的 XServer 应用程序后,我发现,无论我尝试什么,我都会遇到同样的错误,即: X Error of Failed request: BadMA
我正在尝试列出所有带有 Xinerama 和 Xrandr 的显示器。这是应该执行此操作的代码: int i, j, screenCount, sizeCount, eventBase, errorB
fedora 或 linux 中的 XINERaMA&FAKEEXTN 是什么,它有什么用..? 最佳答案 这是指针对旧版本 Sun JDK 中的错误的解决方法。使用 IcedTea 时不需要它。 关
我正在开发一个小副项目,以便在 GNOME 下的多个屏幕上显示多个壁纸(这显然是 GNOME 本身或其他任何东西都无法完成的)。我已经弄清楚如何完成它的主要部分(出于好奇,使用 ImageMagick
我正在开发一个小项目来在 GNOME 下的多个屏幕上显示多个壁纸(这显然是 GNOME 本身或其他任何东西都无法做到的)。我已经弄清楚了如何完成它的主要部分(出于好奇,使用 ImageMagick 组
我是一名优秀的程序员,十分优秀!