如何控制树莓派上的c++图形输出

How do I Control Which Desktop C++ Graphics Output to on Raspberry Pi?

本文关键字:c++ 输出 图形 何控制 控制      更新时间:2023-10-16

我试图在我的学校运行一个编程俱乐部,这是不实际的物理连接Pi的kb,鼠标和监视器,所以他们都自动运行VNC,我们使用Ultra-VNC连接到机器。程序在共享目录中编写,Eclipse c++在主机上运行;因此,所有的程序输出都是通过VNC查看的。

在用Python编程和开始使用c++时,一切都很好。然而,我在尝试显示图形时遇到了瓶颈。我可以编写一个看起来可以运行的程序,但它只提供终端输出——它永远不会在屏幕上显示图形。当我试图解决这个问题时,有一次我连接了键盘和鼠标,注意到它们似乎被识别出来了(激光出现了,Caps Lock切换了,等等),但是当移动/键入时,它们没有做任何事情。

当我越来越困惑为什么没有其他人遇到这个问题,而似乎有很多人在使用openvg时,我开始想知道更多关于kb/mouse的问题。

我试着把HDMI输出插入家里的显示器(学校的仍然是模拟d-sub!),你瞧,物理kb和鼠标工作了。然后事情变得很奇怪!

不知怎么的,我有两个桌面同时运行。其中一个由物理键盘和鼠标控制,另一个由VNC控制。如果我在"物理"桌面启动终端窗口,它不会显示在"VNC"桌面,反之亦然-它们似乎是独立的,尽管这并不完全正确。

当我在"物理"桌面上运行图形可执行文件时,它工作得很好,可以只使用物理kb来控制。当我在"VNC"桌面运行它时,它只能用VNC kb来控制,但输出显示在物理屏幕上。

我真的不明白!

我需要能够在VNC上运行程序,但是我需要能够告诉我运行的代码要输出到哪个桌面,因为它似乎默认是错误的。实际上,最好是让VNC连接到现有的HDMI桌面,而不是开始一个新的,但我不知道如何告诉tightVNC这样做。

代码在这里,但我认为问题可能是在init()函数是在一个库中,所以它可能是更好的获得VNC到正确的桌面…

提前感谢您的帮助!

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
extern "C" {
#include "VG/openvg.h"
#include "VG/vgu.h"
#include "fontinfo.h"
#include "shapes.h"
}
using namespace std;
int main (void) {
int width, height;
        VGfloat w2, h2, w;
    char s[3];
    init(&width, &height);                                      // Graphics initialization
    w2 = (VGfloat)(width/2);
    h2 = (VGfloat)(height/2);
    w  = (VGfloat)w;
    Start(width, height);                                       // Start the picture
    Background(0, 0, 0);                                        // Black background
    Fill(44, 77, 232, 1);                                       // Big blue marble
    Circle(w2, 0, w);                                           // The "world"
    Fill(255, 255, 255, 1);                                     // White text
    TextMid(w2, h2, "hello, world", SerifTypeface, width/10);   // Greetings
    End();                                                      // End the picture
    fgets(s, 2, stdin);                                         // Pause until RETURN]
    finish();                                                   // Graphics cleanup
    exit(0);
}

参见最后一条注释-放弃openvg并使用X Windows