kvm虚拟机vnc和spice配置

2023-11-18

一、简介

        通过vnc或spice方式访问虚拟主机上的KVM虚拟机,可以直接通过图形化界面virt-manager来设置,但此处通过xml配置文件修改。

二、详解

1、VNC方式访问

        vnc方式访问虚拟机不是在kvm虚拟机安装配置vnc服务器,通过虚拟主机的IP地址与端口进行访问,kvm虚拟化对vnc的支持相对来说比xen要好很多,在虚拟主机上配置VNC访问虚拟机,也是为了多提供一种方式访问虚拟机而已。
(1)修改qemu.conf(也可不修改,默认是127.0.0.1)

#vi /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0"

       vnclisten默认绑定127.0.0.1,在配置文件里指定VNC绑定0.0.0.0,就不用在安装kvm虚拟机时指定vnclisten参数了。当在虚拟主机上有很多个虚拟机的时候,若指定每个虚拟机的端口,将会很乱,所以采用0.0.0.0自动分配端口。
(2)修改目标虚拟机smb3.1的配置文件
#virsh list --all
#virsh edit smb3.1

<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
    <listen type='address' address='0.0.0.0'/>
</graphics>

#virsh start smb3.1
(3)查看运行虚拟机的vnc端口
查看vnc端口#netstat -tunlp

 

也可以通过virsh命令动态查看虚拟机的xml配置文件#virsh dumpxml smb3.1

(4)vnc登录
windows下可以通过vnc viewer或TightVNC或RealVNC等工具登录。

linux下可以安装tigervnc,然后通过#vncviewer 127.0.0.1:5901登录。

linux下也可以通过#virt-viewer --connect qemu:///system smb3.1访问,非本机的linux通过#virt-viewer  qemu+ssh://root@192.168.40.125/system smb3.1访问。
(5)vnc源码登录
kde桌面的源码包kdenetwork中可以找到krdc/vnc中关于vnc的源码,提取vncview.cpp、vncclientthread.cpp和remoteview.cpp即可运行vnc。

#include "widget.h"
#include "vncview.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent,  Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint)
{
    resize(900+20, 900+20);

    VncView *vncView = new VncView(this, QUrl("vnc://:@192.168.40.125:5901"));
    vncView->enableScaling(true);
    vncView->scaleResize(900, 900);
    vncView->show();
    vncView->start();
}

Widget::~Widget()
{

}

 

 

 

 

2、SPICE方式访问

(1)修改目标虚拟机smb3.1的配置文件
#virsh list --all
#virsh edit smb3.0

<graphics type='spice' autoport='yes' listen='0.0.0.0'>
    <listen type='address' address='0.0.0.0'/>
</graphics>

#virsh start smb3.0
(2)查看运行虚拟机的vnc端口
#netstat -tunlp
a

 

 

 

或通过virsh命令动态查看虚拟机的xml配置文件#virsh dumpxml smb3.0

(3)spice登录
linux下通过#virt-viewer --connect qemu:///system smb3.0登录到图形化界面。

也可以通过命令#spicy -h 127.0.0.1 -p 5900(需安装spice-gtk-tools软件包)。
(4)spice源码登录
spice-gtk提供了完整的gtk界面。

#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <gtk/gtk.h>
#include <spice-channel.h>
#include <spice-session.h>
#include <spice-widget.h>

static GtkWidget *main_window;
static SpiceSession *spice_session;
static SpiceDisplay *spice_display;
static char *host;
static char *port;


static void channel_new(SpiceSession *s, SpiceChannel *c, gpointer *data)
{
    int id = 0;

    g_object_get(c, "channel-id", &id, NULL);

    if (SPICE_IS_MAIN_CHANNEL(c)) {
        fprintf(stdout, "new main channel\n");
        return;
    }

    if (SPICE_IS_DISPLAY_CHANNEL(c)) {
        fprintf(stdout, "new display channel (#%d), creating window\n", id);
        spice_display = spice_display_new(s, id);
        gtk_container_add(GTK_CONTAINER(main_window), GTK_WIDGET(spice_display));
        gtk_widget_show_all(main_window);
        return;

    }

}

static void usage()
{
    fprintf(stdout, "spice-client: A spice client\n"
            "Usage: spice-client [options]...\n"
            "  -h, --host\n"
            "      Set address of spice server\n"
            "  -p, --port\n"
            "      Set port of spice server\n"
            "  -e, --help\n"
            "      Print help and exit\n"
        );
}

static void parse_cmd(int argc, char *argv[])
{
    int c, e = 0;

    if (argc == 1) {
        usage();
        exit(1);
    }

    const struct option long_options[] = {
        { "help", 0, 0, 'e' },
        { "host", 0, 0, 'h' },
        { "port", 0, 0, 'p' },
        { 0, 0, 0, 0 },
    };

    while ((c = getopt_long(argc, argv, "eh:p:",
                            long_options, NULL)) != EOF) {
        switch (c) {
        case 'e':
            goto failed;
        case 'h':
            host = optarg;
            break;
        case 'p':
            port = optarg;
            break;
        default:
            e++;
            break;
        }
    }

    if (e || argc > optind) {
        goto failed;
    }

    if (host == NULL || port == NULL) {
        fprintf(stderr, "No host or port found\n");
        goto failed;
    }

    return ;

failed:
    usage();
    exit(1);
}

int main(int argc, char *argv[])
{
    parse_cmd(argc, argv);

    gtk_init(&argc, &argv);
    main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    spice_session = spice_session_new();
    g_object_set(spice_session, "host", host, NULL);
    g_object_set(spice_session, "port", port, NULL);
    g_signal_connect(spice_session, "channel-new",
                     G_CALLBACK(channel_new), NULL);

    if (!spice_session_connect(spice_session)) {
        fprintf(stderr, "spice_session_connect failed\n");
        exit(1);
    }

    gtk_main();
    return 0;
}
gcc -o spice-client client.c `pkg-config --cflags --libs spice-client-gtk-2.0`
./spice-client -h 127.0.0.1 -p 5900

 

 

 

 

三、总结

(1)上述代码仅仅是测试代码,若要功能完善还需比较多的工作。
(2)参考:http://mathslinux.org/?p=228http://mathslinux.org/?cat=39
(3)若有问题或建议,请留言,在此感谢!

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kvm虚拟机vnc和spice配置 的相关文章

  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 尝试安装 LESS 时出现“请尝试以 root/管理员身份再次运行此命令”错误

    我正在尝试在我的计算机上安装 LESS 并且已经安装了节点 但是 当我输入 node install g less 时 出现以下错误 并且不知道该怎么办 FPaulMAC bin paul npm install g less npm ER
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • Pyaudio 安装错误 - “命令‘gcc’失败,退出状态 1”

    我正在运行 Ubuntu 11 04 Python 2 7 1 并想安装 Pyaudio 于是我跑了 sudo easy install pyaudio 在终端中 进程退出并显示以下错误消息 Searching for pyaudio Re
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • NPTL 和 POSIX 线程有什么区别?

    NPTL 和 POSIX 线程之间的基本区别是什么 这两者是如何演变的 POSIX 线程 pthread 不是一个实现 它是几个函数的 API 规范 纸上的标准 英文 其名称以pthread 以及定义在
  • Linux:在文件保存时触发 Shell 命令

    我想在修改文件时自动触发 shell 命令 我认为这可以通过注册 inotify 挂钩并调用来在代码中完成system 但是是否有更高级别的 bash 命令可以完成此任务 尝试 inotify 工具 我在复制链接时遇到问题 抱歉 但 Git
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • 如何在 Bash 中给定超时后终止子进程?

    我有一个 bash 脚本 它启动一个子进程 该进程时不时地崩溃 实际上是挂起 而且没有明显的原因 闭源 所以我对此无能为力 因此 我希望能够在给定的时间内启动此进程 如果在给定的时间内没有成功返回 则将其终止 有没有simple and r
  • 按进程名称过滤并记录 CPU 使用情况

    Linux 下有选项吗顶部命令 https www man7 org linux man pages man1 top 1 html我可以在哪里按名称过滤进程并将每秒该进程的 CPU 使用情况写入日志文件 top pgrep 过滤输出top
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件

随机推荐

  • Linux-MySQL 5.7.30安装与配置及开机自启

    Linux MySQL5 7 30安装配置 1 准备 1 1 检测系统是否自带MySQL 1 2 如果有 则使用下面命令进行删除 1 3 删除成功后 查询所有Mysql对应的文件夹 1 4 删除上面查找的所有文件夹 2 安装 2 1 使用X
  • java 调用C#的webservice

    import java rmi RemoteException import java util regex Matcher import java util regex Pattern import javax xml rpc Servi
  • TPS-1教学:TPS-1主控MCU程序软件移植指南

    TPS 1教学 TPS 1主控MCU程序软件移植指南视频 TPS 1教学 TPS 1主控MCU程序软件移植指南 电子发烧友网
  • vue项目部署到服务器

    启动和打包 进入项目目录 cd 进入到你项目的根目录 安装依赖 npm install 强烈建议不要用直接使用 cnpm 安装 会有各种诡异的 bug 可以通过重新指定 registry 来解决 npm 安装速度慢的问题 npm insta
  • Codeup(云效)手把手教部署SpringCloud项目到私有主机

    博主介绍 小黄鸭技术 擅长领域 Java 实用工具 运维 系列专栏 开发工具 Java之路 八股文之路 如果文章写作时有错误的地方 请各位大佬指正 一起进步 欢迎大家点赞 收藏 评论 支持博主 开通云效 上传代码仓库 配置SSH公钥或者是H
  • 在 openEuler 20.03 LTS SP1 中安装 JupyterLab

    目录 一 安装 openEuler 20 03 LTS SP1 1 1 Hyper V 虚拟化环境设置 1 2 安装配置 二 升级 Python 到 3 9 1 2 1 安装开发包 2 2 安装 LibreSSL 替代 OpenSSL 非必
  • Error in v-on handler (Promise/async): “Error: Request failed with status code 500“

    Error in v on handler Promise async Error Request failed with status code 500 点击确定按钮 添加数据 POST请求 报了错 发现是这个POST请求需要传参 传对象
  • 远程命令执行/命令注入 之 命令连接符

    目录 一 理论 二 实践 windows 10 a b a b a b a b kali linux a b a b a b a b 一 理论 远程命令执行可以用到的命令连接符 windows系统和linux系统各有4个 其中3个是共有的
  • [ 网络 ] 应用层协议 —— HTTP协议

    目录 1 HTTP协议 1 1URL urlencode和urldecode 2 HTTP协议格式 HTTP请求 HTTP响应 3 告知服务器意图的HTTP方法 GET 获取资源 POST 传输实体主体 GET和POST的区别 使用Cook
  • idea 最干净的的主题 Obsidian!

    idea 最干净的的主题 Obsidian
  • NETGEAR拒绝连接请求_习惯了独来独往,该怎么与别人建立连接?

    亲爱的咨询师 您好 受我这种别扭的性格困扰好久了 不知道为什么 我不知道怎么跟别人建立亲密关系 在与别人相处的过程中 我总是把自己放在很低的位置 过分在意别人的想法 不敢表达自己的真实想法 说话总是顺着别人 点菜也会犹豫很久 不敢点自己喜欢
  • from pathlib import path_华丽的蜕变-使用Pathlib模块,文件操作So Easy!

    更多精彩内容 请关注微信公众号 python学习开发 前言 大多人处理文件用的最多的还是os模快吧 比如下面这样的操作 gt gt gt path rsplit maxsplit 1 0 或者写出下面这样长长的代码 gt gt gt os
  • VS2005下MFC开发的ActiveX控件的部分总结 inf 篇

    本博客转载CSDN网友http blog csdn net immc1979 archive 2007 04 20 1572222 aspx 本人觉得写得非常的实在 一看就是从实际经验中总结出来的 借鉴了 感谢immc1979 虽然微软对A
  • 1-OpenWrt编译过程-2

    前言 接触 op 已达四年 今年开始梳理整体所学 具体还参考了佐大的视频 对 op 缺乏系统知识的可以尝试 总体而言官方文档和源码是最好的教程 文章目录 编译OpenWrt 概述 1 更新安装所有可选的软件包 2 编译设置 make men
  • 用C语言解“两个数的简单计算器”题

    7 12 两个数的简单计算器 本题要求编写一个简单计算器程序 可根据输入的运算符 对2个整数进行加 减 乘 除或求余运算 题目保证输入和输出均不超过整型范围 输入格式 输入在一行中依次输入操作数1 运算符 操作数2 其间以1个空格分隔 操作
  • Eclipse+webservice简单实例搭建

    文章作为学习笔记和分享用 准备工作 下载安装eclipse和axis2 1 5 4 bin zip 最新版本的搭建有问题就选择了此版本 下载本地找一个目录解压 1 指定axis2路径 Window gt Preferences gt Web
  • blender学习记录1--界面,工具介绍

    1 大纲选项开关 此时camera cube light对应图中的物体 没点一个则会自动选中物体 上图先开始camera cube light后面什么选项都没有 在漏斗一样的按钮选中这4个 第一个小箭头 是物体不能被选中 第二个眼睛 将物体
  • 本人的java小小作品--计算器

    初学者 菜鸟 小小作品 只实现了最简单的加减乘除功能 望请各位牛人指导 代码如下 试问 下面红色字体代码部分 能不能精简 或是其他改进一下啊 太繁琐了那样写 import java awt import java awt event imp
  • 刷题day68:完全平方数

    题意描述 给你一个整数 n 返回 和为 n 的完全平方数的最少数量 完全平方数 是一个整数 其值等于另一个整数的平方 换句话说 其值等于一个整数自乘的积 例如 1 4 9 和 16 都是完全平方数 而 3 和 11 不是 思路 与零钱兑换完
  • kvm虚拟机vnc和spice配置

    一 简介 通过vnc或spice方式访问虚拟主机上的KVM虚拟机 可以直接通过图形化界面virt manager来设置 但此处通过xml配置文件修改 二 详解 1 VNC方式访问 vnc方式访问虚拟机不是在kvm虚拟机安装配置vnc服务器