千家信息网

kvm虚拟机vnc和spice如何配置

发表于:2024-12-01 作者:千家信息网编辑
千家信息网最后更新 2024年12月01日,这篇文章主要为大家展示了"kvm虚拟机vnc和spice如何配置",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"kvm虚拟机vnc和spice如何配置"这篇
千家信息网最后更新 2024年12月01日kvm虚拟机vnc和spice如何配置

这篇文章主要为大家展示了"kvm虚拟机vnc和spice如何配置",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"kvm虚拟机vnc和spice如何配置"这篇文章吧。

一、简介

通过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"

重启libvirt

#systemctl restart libvirtd.service

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

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

:0

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

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

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。

  1. #include "widget.h"

  2. #include "vncview.h"

  3. Widget::Widget(QWidget *parent)

  4. : QWidget(parent, Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint)

  5. {

  6. resize(900+20, 900+20);

  7. VncView *vncView = new VncView(this, QUrl("vnc://:@192.168.40.125:5901"));

  8. vncView->enableScaling(true);

  9. vncView->scaleResize(900, 900);

  10. vncView->show();

  11. vncView->start();

  12. }

  13. Widget::~Widget()

  14. {

  15. }

2、SPICE方式访问

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

[html] view plain copy

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

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

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

[html] view plain copy

  1. #include

  2. #include

  3. #include

  4. #include

  5. #include

  6. #include

  7. #include

  8. static GtkWidget *main_window;

  9. static SpiceSession *spice_session;

  10. static SpiceDisplay *spice_display;

  11. static char *host;

  12. static char *port;

  13. static void channel_new(SpiceSession *s, SpiceChannel *c, gpointer *data)

  14. {

  15. int id = 0;

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

  17. if (SPICE_IS_MAIN_CHANNEL(c)) {

  18. fprintf(stdout, "new main channel\n");

  19. return;

  20. }

  21. if (SPICE_IS_DISPLAY_CHANNEL(c)) {

  22. fprintf(stdout, "new display channel (#%d), creating window\n", id);

  23. spice_display = spice_display_new(s, id);

  24. gtk_container_add(GTK_CONTAINER(main_window), GTK_WIDGET(spice_display));

  25. gtk_widget_show_all(main_window);

  26. return;

  27. }

  28. }

  29. static void usage()

  30. {

  31. fprintf(stdout, "spice-client: A spice client\n"

  32. "Usage: spice-client [options]...\n"

  33. " -h, --host\n"

  34. " Set address of spice server\n"

  35. " -p, --port\n"

  36. " Set port of spice server\n"

  37. " -e, --help\n"

  38. " Print help and exit\n"

  39. );

  40. }

  41. static void parse_cmd(int argc, char *argv[])

  42. {

  43. int c, e = 0;

  44. if (argc == 1) {

  45. usage();

  46. exit(1);

  47. }

  48. const struct option long_options[] = {

  49. { "help", 0, 0, 'e' },

  50. { "host", 0, 0, 'h' },

  51. { "port", 0, 0, 'p' },

  52. { 0, 0, 0, 0 },

  53. };

  54. while ((c = getopt_long(argc, argv, "eh:p:",

  55. long_options, NULL)) != EOF) {

  56. switch (c) {

  57. case 'e':

  58. goto failed;

  59. case 'h':

  60. host = optarg;

  61. break;

  62. case 'p':

  63. port = optarg;

  64. break;

  65. default:

  66. e++;

  67. break;

  68. }

  69. }

  70. if (e || argc > optind) {

  71. goto failed;

  72. }

  73. if (host == NULL || port == NULL) {

  74. fprintf(stderr, "No host or port found\n");

  75. goto failed;

  76. }

  77. return ;

  78. failed:

  79. usage();

  80. exit(1);

  81. }

  82. int main(int argc, char *argv[])

  83. {

  84. parse_cmd(argc, argv);

  85. gtk_init(&argc, &argv);

  86. main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

  87. spice_session = spice_session_new();

  88. g_object_set(spice_session, "host", host, NULL);

  89. g_object_set(spice_session, "port", port, NULL);

  90. g_signal_connect(spice_session, "channel-new",

  91. G_CALLBACK(channel_new), NULL);

  92. if (!spice_session_connect(spice_session)) {

  93. fprintf(stderr, "spice_session_connect failed\n");

  94. exit(1);

  95. }

  96. gtk_main();

  97. return 0;

  98. }

  99. gcc -o spice-client client.c `pkg-config --cflags --libs spice-client-gtk-2.0`

  100. ./spice-client -h 127.0.0.1 -p 5900

以上是"kvm虚拟机vnc和spice如何配置"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0