标签归档:RDP

kvm、spice安装Windows 7备忘录

去年在一台备用服务器上装了个VirtualBox虚拟机,用headless模式跑Windows 7,当做我的日常用系统,无论在哪都用RDP(Windows的远程桌面协议)远程登上,彻底的大内存、多CPU、千兆接入云桌面,非常舒服。

VirtualBox是个很棒的虚拟机,无论图形界面还是命令行界面,都很好用。但间或死机(虚拟机停转,却把CPU占满),分越多的CPU速度越慢(可能是我后分的多CPU有关),以及虚拟磁盘配置不合理这三个原因,使我萌生了换虚拟机的念头。

这篇评测文章的结果是kvm的性能最好,此外听安天的王维工程师说只有kvm支持的spice协议是目前最快的远程桌面协议,有代码洁癖的我就当然选用它了。但这东西,比VirtualBox和VMWare都难配置太多了……必须得写下来备忘一些要点了。

kvm

kvm本身是个命令行程序,直接“kvm 参数”就能用。一开始就这么用,系统安装顺利,网络通畅。然后加bridged模式的网卡,结果一启动虚拟机就让主机网卡都断掉(甚至一度重启host系统都不能恢复,导致网络中心狠狠地重新收拾了一遍若干台交换机。对此麻烦,深表歉意)。查了无数资料,什么bridge、tun、tap的一通研究,各种脚本、手工试验,全无效。最后实在不想再跑机房了,就换用virt-manager建虚拟机。

virt-manager是libvirt的一个图形客户端,而libvirt是个通用的虚拟机管理库(支持kvm、xen、virtualbox、vmware等等)。virsh是libvirt的命令行客户端,用“virsh -c qemu:///system”可以在命令行管理virt-manager创建的虚拟机。

需要先在系统启动一个桥接网卡,才能在虚拟机里装bridged网卡。修改/etc/network/interfaces(debian)如下:

Windows 7最多只支持两个CPU socket,每个socket内可以有多个core。kvm缺省每个CPU模拟一个socket,必须修改虚拟机CPU的topology,才能使用超过一个CPU。

spice

virt-manager创建的虚拟机只要加了spice display,就可以用spice协议远程使用虚拟机的控制台。

Linux下的spice客户端叫spicec。

最重要的是Win7里必须安装spice的驱动和服务,才能让性能和功能达到最强。相关程序在这里下载:http://www.spice-space.org/download.html

qxl和virtio-serial驱动是必须安装的。如果安装时提示数字签名无效,驱动不生效,用管理员权限执行cmd.exe,运行下面两行命令并reboot(reboot后桌面会有“测试模式”字样,不影响使用):

Windows guest agent服务也必须安装,才能同步剪贴板、屏幕分辨率。解开那个vdagent-xxxxx.zip,在管理员权限命令行执行“vdservice install”,然后reboot。

客户端加上–full-screen=auto-conf参数,就能全屏且同步分辨率了。Shift-F11切换全屏状态

spice性能确实比rdp好太多,看flash、gif基本不卡,视频音画基本同步,鼠标、键盘无延迟。最爽的,可以用招商银行大众版了!

安全的spice

spice缺省使用不安全连接。

用下面脚本创建必须的key

根据提示记住–host-subject,拷贝ca-cert.pem到指定位置

关闭虚拟机,重新启动libvirtd(sudo /etc/init.d/libvirt-bin restart)

客户端用“spicec -h HOSTNAME -s TLS-PORT –host-subject HOST-SUBJECT -w PASSWORD”连接

其它

虚拟机硬件配置很容易调整,导致Windows激活经常失效。在线激活失败时,选电话激活,根据提示打电话,跟客服mm稍加解释,就能顺利激活了。(此条只对正版Windows有效)

主要参考

  1. SSLConnection – Spice
  2. QA:Testcase Virtualization Manually set spice listening port with TLS port set
  3. WinQXL – Spice
  4. Networking – KVM
  5. manpages

(待补充:port forward)

用rdesktop映射本地打印机到远程的要点

Linux端:

  1. rdesktop一定要用“-5”参数。只有RDP5才支持打印机映射
  2. rdesktop映射打印机的参数“-r printer:hp-LaserJet-1010=”HP 1010″”。其中hp-LaserJet-1010必须是Linux上安装的打印机的名字。”HP 1010″可随便起名,貌似是远程Windows看到的打印机名

Windows端:

  1. 貌似不会自动搜索到这个打印机,需要手工添加
  2. 添加打印机->添加本地打印机,在端口中找TS00x这样名的,后面括号里跟着你的Linux主机名和PRN1,然后下一步,选驱动就行了。

rdesktop的代码库最近很长时间一直在更新,但是始终没有发布新版本。可气的是作者把代码树里的Makefile删了,想自己编译一个尝鲜都不能。热烈盼望beta啊!

让远程桌面(RDP)始终保持连接

RDP对我来说实在太重要了,但最近不知道是校园网还是电信网路由做调整,自动断开一段时间没有活动的连接,导致我切换回本地工作一会儿,再回到远程的时候,就得重新连接,非常麻烦。下面方法可以让连接一直保持着:

运行gpedit.msc,依次进入Computer Configuration -> Administrative Templates -> Windows Components -> Terminal Services -> Terminal Server -> Connections -> Configure keep-alive connection interval,将其Enabled,并设置interval到一个合理的值(单位:分钟)。我设置的1。

rdesktop Patch: Switch Local Workspaces and Windows by Local Hot Keys

rdesktop is a powerful RDP client for Linux. The inability of switch applications between remote side and local side by hot key makes it a little uncomfortable. Look around the internet, you can find many requests for the feature but no solutions. So I made the patch. It do things like:

  • Double press Ctrl+Alt+Left or Ctrl+Alt+Right to switch local active workspaces.
  • Double press Ctrl+Alt+Tab to switch local active window.
  • Other hot keys are sent directly to remote machine.
  • If using -fD options and having two or above workspaces, the effect is amazing!
  • If rdesktop is running in fullscreen mode (-f and without -D), Ctrl+Alt+Left/Right/Tab will toggle it to window mode first. After switching back, it can NOT toggle to fullscreen automatically. Press Ctrl+Alt+Enter to do that. (I know this is boring. But it is the best I can do. Rdesktop use override_redirect to implement fullscreen which makes it always the top-most window no matter which workspace/window you have switched to)

Download and unpack rdesktop.tgz to get a patched executable file: rdesktop. Overwrite /usr/bin/rdesktop with it. That’s all. The file was compiled with all debian/ubuntu official patches and tested in Ubuntu 9.10 (Karmic). It should work in other Linux distribution too. If it does or does not work in your environment, please leave a comment to report.

switch_local_workspace_and_window.patch is the code.

rdesktop忽略Ctrl+Alt+Left/Right的补丁

此贴已老,请移步rdesktop Patch: Switch Local Workspaces and Windows by Local Hot Keys

经常本地运行Linux,用rdesktop连接远程的Windows主机,两边配合工作。如果能通过快捷键切换两个桌面环境,会很方便。但rdesktop窗口会吸走所有的按键,发给远程桌面,包括Window Manager管理的热键。加上“-K”参数,远端就收不到很多热键了,比如最常用的Alt+Tab。在网上搜了一下,很多人都为此困扰,但没有任何解决办法。可能大牛们都只用纯用*nix,根本无视rdesktop的存在吧。于是,我就自己做了这个补丁,实现了下面的效果:

  • Linux桌面上要有至少两个Workspace,一个运行rdesktop,其余的本地用
  • 在rdesktop中,连按两次及以上的Ctrl+Alt+Left/Right,可以切换Workspace,也就是虚拟桌面
  • 建议启动rdesktop的时候,不加“-K”参数
  • 如果用全屏方式(-f)启动rdesktop,切换Workspace的时候,rdesktop会跟着走,达不到想要的效果。这和rdesktop用override_redirect方式实现全屏窗口有关。我不知道该怎么解决。如果有了解的朋友,请不吝赐教。我现在是用“-D”参数隐藏rdesktop窗口的外框,用“-g”设一个足够大的窗口,刚好上顶上面的panel,下踩下面的panel。

rdesktop_1.6.0-2ubuntu99_i386.deb是我在Ubuntu karmic上编译好的安装文件,估计Debian上也能用。用“sudo dpkg -i rdesktop_1.6.0_2ubuntu99_i386.deb”安装。其它平台可以下载rdesktop源代码,打上99_switch_desktop_support.dpatch补丁,自己编译试试,估计应该都能好用。