virt-viewer源码分析

在 Windows 11 或 10 上安装 Virt-viewer 的单行命令 摘要:Virt-Viewer(Remote Viewer)是Redhat开发的开源工具,用于远程连接VNC/SPICE协议的虚拟机。本文提供Windows 11/10的安装指南:1)以管理员身份运行CMD;2)更新Winget源;3)搜索virt-viewer包;4)通过winget命令自动安装;5)从开始菜单启动程序。该工具仅支持虚拟机连接,不支持管理操作。文中还提供了手动下载链接和Redhat官方文档参考。 阅读详情

本文主要是针对spice的基础上对virt-viewer进行分析,使用这款软件的主要命令就是remote-viewer这个命令,因此本文在此主要分析的文件就是remote-viewer-main.c文件,spice编程方式基本上都是使用c语言实现面向对象的编程方式
安装好软件后使用remote-viewer命令,然后在对话框中的输入:spice://172.16.1.134?port=9004;


然后点击连接就会链接到服务器端了实现远程登录,如下图所示:

 
#include <config.h>//主要是程序中的一些开关的定义,通过#define 来定义实现某些功能的裁剪,这个文件在virt-viewer源码下
#include <locale.h>
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <stdlib.h>
#ifdef G_OS_WIN32
#include <windows.h>
#include <io.h>
#endif

#ifdef HAVE_GTK_VNC
#include <vncdisplay.h>
#endif
#ifdef HAVE_SPICE_GTK   //spice-gtk的使能在config.h中
#include <spice-option.h>//主要调用spice的操作选项spice_set_session_option这个函数 设置spice session选项,一些功能的使能,比如usbredir
#endif
#ifdef HAVE_OVIRT
#include <govirt/ovirt-options.h>
#endif

#include "remote-viewer.h"
#include "virt-viewer-app.h"
#include "virt-viewer-session.h"

static void
remote_viewer_version(void)//显示本系统版本好,在config.h中是有定义的,本文件是2.0 版本
{
    g_print(_("remote-viewer version %s\n"), VERSION BUILDID);
    exit(EXIT_SUCCESS);
}

static void
recent_add(gchar *uri, const gchar *mime_type)
{
    GtkRecentManager *recent;
    GtkRecentData meta = {
        .app_name     = (char*)"remote-viewer",
        .app_exec     = (char*)"remote-viewer %u",
        .mime_type    = (char*)mime_type,
    };

    if (uri == NULL)
        return;

    recent = gtk_recent_manager_get_default();
    meta.display_name = uri;
    if (!gtk_recent_manager_add_full(recent, uri, &meta))
        g_warning("Recent item couldn't be added");
}

static void connected(VirtViewerSession *session,
                      VirtViewerApp *self G_GNUC_UNUSED)
{
    gchar *uri = virt_viewer_session_get_uri(session);
    const gchar *mime = virt_viewer_session_mime_type(session);

    recent_add(uri, mime);
    g_free(uri);
}

int
main(int argc, char **argv)
{
    GOptionContext *context;//这是glib中对输入参数的解析,并没有直接利用判断
    GError *error = NULL;
    int ret = 1;
    gchar **args = NULL;
    gchar *uri = NULL;
    char *title = NULL;
    RemoteViewer *viewer = NULL;
#ifdef HAVE_SPICE_GTK //同样检测spice-gtk的时能情况,在config.h中有定义
    gboolean controller = FALSE;//关闭controller
#endif
    VirtViewerApp *app;
    const GOptionEntry options [] = {//GOptionEntry就是GLib提供一个方便我们设置输入参数的结构的,例如 cd /home
        { "version", 'V', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
          remote_viewer_version, N_("Display version information"), NULL },//显示参数-V的作用即 virt-viewer -V,显示相关的信息
        { "title", 't', 0, G_OPTION_ARG_STRING, &title,
          N_("Set window title"), NULL },
#ifdef HAVE_SPICE_GTK
        { "spice-controller", '\0', 0, G_OPTION_ARG_NONE, &controller,
          N_("Open connection using Spice controller communication"), NULL },
#endif
        { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &args,
          NULL, "URI|VV-FILE" },
        { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL }
    };
    GOptionGroup *app_options = NULL;

    virt_viewer_util_init(_("Remote Viewer"));//初始化相关的remote选项

    /* Setup command line options */
    context = g_option_context_new (NULL);//重设命令行
    g_option_context_set_summary(context, _("Remote viewer client"));
    app_options = virt_viewer_app_get_option_group();
    g_option_group_add_entries (app_options, options);
    g_option_context_set_main_group (context, app_options);
    g_option_context_add_group (context, gtk_get_option_group (TRUE));
#ifdef HAVE_GTK_VNC
    g_option_context_add_group (context, vnc_display_get_option_group ());
#endif
#ifdef HAVE_SPICE_GTK
    g_option_context_add_group (context, spice_get_option_group ());
#endif
#ifdef HAVE_OVIRT
    g_option_context_add_group (context, ovirt_get_option_group ());
#endif
    g_option_context_parse (context, &argc, &argv, &error);//获取context内的参数
    if (error) {
        char *base_name;
        base_name = g_path_get_basename(argv[0]);
        g_printerr(_("%s\nRun '%s --help' to see a full list of available command line options\n"),
                   error->message, base_name);
        g_free(base_name);
        g_error_free(error);
        goto cleanup;
    }

    g_option_context_free(context);

#ifdef HAVE_SPICE_GTK
    if (controller) {
        if (args) {
            g_printerr(_("Error: extra arguments given while using Spice controller\n"));
            goto cleanup;
        }
    } else
#endif
    if (args) {
        if (g_strv_length(args) > 1) {
            g_printerr(_("Error: can't handle multiple URIs\n"));
            goto cleanup;
        } else if (g_strv_length(args) == 1) {
            uri = g_strdup(args[0]);
        }
    }

#ifdef HAVE_SPICE_GTK
    if (controller) {
        viewer = remote_viewer_new_with_controller();
        g_object_set(viewer, "guest-name", "defined by Spice controller", NULL);
    } else {
#endif
        viewer = remote_viewer_new(uri);
        if (title)
            g_object_set(viewer, "title", title, NULL);
#ifdef HAVE_SPICE_GTK
    }
#endif
    if (viewer == NULL)
        goto cleanup;

    app = VIRT_VIEWER_APP(viewer);

    if (!virt_viewer_app_start(app))
        goto cleanup;

    g_signal_connect(virt_viewer_app_get_session(app), "session-connected",
                     G_CALLBACK(connected), app);

    gtk_main();

    ret = 0;

 cleanup:
    g_free(uri);
    if (viewer)
        g_object_unref(viewer);
    g_strfreev(args);

    return ret;
}









Windows用户如何远程管理Linux KVM?Virt-Viewer配置SPICE/VNC连接避坑指南 本文详细介绍了Windows用户如何通过Virt-Viewer远程管理Linux KVM虚拟机,包括SPICE/VNC连接的配置步骤、性能调优及常见问题解决方案。重点讲解了Virt-Viewer的安装、Linux端KVM服务配置、连接优化及安全加固,帮助用户高效实现跨平台图形化管理。 阅读详情

相关推荐

Spice-client源码简要分析

下载地址:https://www.spice-space.org/download/gtk/spice-gtk-0.35.tar.bz2 或者gitlab,https://gitlab.com/spice spice-client官方的代码便是spice-gtk。 spice-gtk的源码里面,tools路径下面有个spicy.c的文件,这个就是官方的gtk客户端。当然,virt-viewer...

Benjamin_Xu的专栏 2779

virt-viewer的简单使用

virt-viewer 简介:virt-viewer是一个用于显示虚拟机的图形控制台的最小工具。 控制台使用VNC或SPICE访问协议。 可以基于其名称,ID或UUID来引用guest虚拟机。如果客户端尚未运行,则可以告知观看者请等待,直到它开始,然后尝试连接到控制台。此查看器可以连接到远程主机以查找控制台信息然后也使用同一网络连接到远程控制台。 用法:virt-v...

weixin_30279751的博客 3427

读源码-VirtualView源码解析

文章目录1-基本原理2-源码解析2.1-xml模板描述2.2-xml模板编译2.3-.out预解析2.4-.out解析构建组件2.5-数据绑定与事件处理 1-基本原理 VirtualView是天猫出品的组件级别的动态化方案,通过动态下发xml模板到客户端,客户端完成模板解析、数据绑定、事件处理等实现动态化。实际常用的应用场景如下: 按照VirtualView SDK中的原生或拓展组件编写Xml模板,和Android中的布局xml类似 将Xml模板解析为二进制文件.out,和Android中xml文件解析

SuperMing学习之路 672

KVM高级功能部署

企业内部为了使服务器资源达到最大化利用,通常都会进行KVM 虚拟化,每台服务器上运行多台 KVM 虚拟机。随着 KVM 虚拟机数量的不断增多,个别服务器会出现资源过载现象,这时候就需要对部分KVM 虚拟机进行迁移,迁移到负载相对较低的服务器上。为了解决以上问题,针对可停机的KVM 虚拟机,可使用静态迁移的方式来迁移KVM虚拟机。针对在线提供服务、不可停机的KVM 虚拟机,可使用基于共享存储的动态迁移或基于数据块的动态迁移来完成迁移工作。

wkysdhr的博客 2041

Linux虚拟机安装用户指南

1. 安装virt-manager yum installvirt-manager.x86_64 yum installvirt-viewer.x86_64 yum installlibvirt-devel.x86_64 yum installlibvirt-python.x86_64 yum installlibvirt.x86_64 2. 修改配置文件以便使用vnc连接,vnc_

ElvisHuang的博客 765

virt-viewer

windows下的virt-viewer工具,可以在windows下连接kvm虚拟机

源码分析

xxl-job 源码运行解析https://blog.youkuaiyun.com/Royal_lr/article/details/93197426 mybatis底层运行原理解析https://blog.youkuaiyun.com/Royal_lr/article/details/88883890

my9988的博客 196

virt-viewer-0.6.0

virt-viewer-0.6.0 云计算 virt-viewer。

Virt-Viewer windows端编译运行

virt-viewer 虚拟化 spice

weixin_43969629的博客 1224

virt-viewer-x86

非常好用的vnc客户端,无需注册,绿色可用

Unity类银河战士恶魔城学习总结(P103之前 Enemy相关 , 骷髅战士,状态机,敌人状态,)

udemy的Alex银河战士恶魔城,记录我自己的学习,代码会逐渐每一p更新,仅供参考学习。

suzh1qian的博客 1633

KVM虚拟机其他操作

虚拟机其他操作 问题 关于KVM虚拟机管理的其他操作: 1)通过virt-viewer直接访问虚拟机 2)使用virt-clone为现有的虚拟机创建克隆 方案 在KVM虚拟化服务器的桌面环境中,可以绕过virt-manager虚拟系统管理器,通过virt-viewer工具直接访问指定的虚拟机,基本用法: virt-viewer 虚拟机名称 另外可以通过virt-clone命令来克隆一台虚拟机,效...

秦庚辰的博客 360

问题:dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)

 1. 问题:Ubuntu安装软件的过程中出现依赖项的问题 “E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).” 按照指示执行如下两条命令都没有解决问题。 sudo apt-get -f install sudo apt-get --fix-broken ...

gloria_littlechi的博客 2万+

虚拟化管理工具

此操作需在root用户下完成,且不能有重名的虚拟机一、虚拟机的管理命令虚拟机由两部分组成/etc/libvirt/qemu/虚拟机.xml                                    虚拟机硬件信息文件/var/lib/libvirt/images/虚拟机.qcow2                            虚拟机硬盘文件virt-viewer  虚拟机名称...

a18229021244的博客 838

【信创-k8s】银河麒麟V10国防版+鲲鹏/飞腾(arm64架构)在线/离线部署k8s1.30+kubesphere

银河麒麟作为国家核高基专项的重要成果,国防版凭借其卓越的安全性和可靠性,已成为军工领域的首选操作系统。之前我们在适配麒麟V4国防版的过程中已发现诸多安全性要求,而麒麟V10国防版在安全防护等级上又达到了更高的级别。本文将主要演示离线部署,因为军工项目基本不会出现联网场景。即使在线,也可以按离线方式部署,且离线部署由于有私有仓库,不会存在镜像获取不到和丢失情况。

2023年最新地推相关信息 543

Android 白名单保活实战:主流厂商适配指南

本文详细解析了Android应用白名单保活的实战策略,重点针对华为、小米、OPPO、vivo等主流厂商的系统特性,提供了精准的后台设置页面跳转适配方案。文章从基础的前台服务实现讲起,深入讲解了白名单的判断、申请与厂商适配的核心代码与避坑指南,旨在帮助开发者合规、稳定地提升应用后台存活率。

motor的博客 1862

KVM管理工具

KVM的管理工具,一般都对qemu命令进行了封装和功能增强,提供了比原生的qemu命令行更加友好、高效的用户交互接口。 1. libvirt libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和应用程序接口,而且一些常用的虚拟机管理工具(如virsh、virt-install、virt-manager等)和云计算框架平台(如OpenStack、ZStack、OpenNebula、Eucalyptus等)都在底层使用libvirt的应用程序接口。其主要作为连接底层Hypervisor和上层应用程序

key_3_feng的博客 4923

基于Java的高校学生信息管理系统的设计与实现(论文+源码)

可以对本系统的数据进行良好的封装,Java可以对不想被访问的数据进行良好的隐藏,具备平台无关性,可移植,更加可靠与安全,具备多线程支持,进行网络交互更容易。它支持本系统的B/S模式。开发效益方面,本系统一旦开发成功并且面向社会,就会让大多数的学生教师体会到便利办公的乐趣,随之促进提高本系统的使用率和经济利润,所以在经济方面,对于零成本开发且高利润的学生管理系统是可行的。学生可以在学生端进行选课,查看自己的成绩,教师可以在教师端查看所任课程的选课情况,对学生成绩进行录入,对所任的课程进行结课等操作。

2402_82389843的博客 1094

KVM虚拟化

KVM虚拟化 参考:https://blog.youkuaiyun.com/weixin_43695104/article/details/88554443 虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。 物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。 那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢? 这个主要是通过一个叫做 Hyp

moyu11111的博客 383

SAP-PP 返工订单成本归集优化:从物料结算到成本中心的配置与增强实践

本文深入探讨SAP-PP模块中返工订单成本归集的优化方案,重点解析从物料结算到成本中心的配置与增强实践。通过结算参数文件配置、分配结构调整及增强开发实战,解决返工费用误计入物料成本的问题,确保财务核算精准性。文章还提供测试验证方案与常见报错处理技巧,助力企业实现成本数据清晰流向分析。

weixin_29260291的博客 366

MQTT(轻量级消息中间件)基本使用指南

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级的发布 / 订阅模式(Pub/Sub)消息传输协议,专为低带宽、不稳定网络环境设计,广泛应用于物联网(IoT)、移动设备、传感器网络等场景(如空气净化器、智能家居设备的远程控制)。Eclipse Mosquitto 是一款轻量级、开源的 MQTT 消息服务器(Broker),由 Eclipse 基金会维护,专为低资源消耗和易用性设计。

墨鸦的博客 1万+

ubuntu16.04下的kvm+libvirt+webvirtmgr虚拟机配置

目录 1简介 1.1效果图 1.1.1win10虚机 1.1.2Ubuntu虚机 2.安装 2.1安装kvm+libvirt等 2.2安装webvirtmgr 3.配置 3.1Libvirt配置Tcp监听 3.2修改webvirtmgr登陆密码 3.2.1修改用户登陆密码(可选) 3.2.2重新创建用户(删除原来的admin账户,可选) 4安装系统 4.1win10安装...

欢迎来到别往的博客 5453

智能能效管家:基于 ESP32 的智能插座设计与精细化功耗管理实现

针对传统插座无法远程控制、功耗监测缺失、能源浪费严重等问题,本文设计一款基于 ESP32 主控芯片的智能插座。该系统集成 WiFi 无线通信、交流功耗采集、继电器通断控制模块,实现四大核心功能。硬件采用模块化选型与安全接线设计,软件基于 Arduino-ESP32 框架开发,搭载 Mqtt 通信协议与功耗算法,可通过手机 / 云端实时管控设备,有效提升用电安全性与能源利用率。:ESP32;智能插座;功耗管理;远程控制;能耗监测。

weixin_42300449的博客 101

安装KVM并创建虚拟机及基本使用

安装KVM并创建虚拟机及基本使用

a rookie的博客 6909

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

使用virt-install安装虚拟机并使用virt-viewer连接桌面

1.使用yum安装virt-install和virt-viewer工具。 2.将centos镜像上传至虚拟机,使用qemu-img创建虚拟机硬盘,然后创建虚拟机 3. #virt-install --connect qemu:///system --name-centos7 --os-type=linux --cdrom=/opt/mirror/centos72003.iso --os-variant=rhel7 --ram 1024 --vcpus 2 --vnc --vncport=5909 --vnc

lilililimu的博客 3221

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Virt-Viewer访问KVM虚拟机报错(virt-viewer:31090): Gtk-WARNING **: 16:22:39.758: cannot open display:

Virt-Viewer访问KVM虚拟机报错(virt-viewer:31090): Gtk-WARNING **: 16:22:39.758: cannot open display:

qq_42511550的博客 1470

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: OpenCV下载的代码的配置总结
下一篇: TTCN-3核心语言第一章与第二章
葫芦娃二娃
博客等级 码龄15年 1850粉丝 69原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值