From owner-freebsd-emulation@FreeBSD.ORG Thu Apr 22 06:43:48 2010 Return-Path: Delivered-To: freebsd-emulation@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9F9CD106566B for ; Thu, 22 Apr 2010 06:43:48 +0000 (UTC) (envelope-from aoyama@peach.ne.jp) Received: from moon.peach.ne.jp (unknown [IPv6:2001:380:e06:127::53]) by mx1.freebsd.org (Postfix) with ESMTP id C00CC8FC1F for ; Thu, 22 Apr 2010 06:43:47 +0000 (UTC) Received: from moon.peach.ne.jp (localhost [127.0.0.1]) by moon.peach.ne.jp (Postfix) with ESMTP id B8E9C78C4A for ; Thu, 22 Apr 2010 15:43:46 +0900 (JST) Received: from artemis (unknown [192.168.2.20]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by moon.peach.ne.jp (Postfix) with ESMTP id 9261378C3B for ; Thu, 22 Apr 2010 15:43:46 +0900 (JST) Message-ID: From: "Daisuke Aoyama" To: Date: Thu, 22 Apr 2010 15:43:43 +0900 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_002F_01CAE232.968E70C0" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.5843 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 X-Virus-Scanned: ClamAV using ClamSMTP Subject: [PATCH] VirtualBox headless VNC support by LibVNCServer (20100421) X-BeenThere: freebsd-emulation@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Development of Emulators of other operating systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Apr 2010 06:43:48 -0000 This is a multi-part message in MIME format. ------=_NextPart_000_002F_01CAE232.968E70C0 Content-Type: text/plain; format=flowed; charset="iso-2022-jp"; reply-type=original Content-Transfer-Encoding: 7bit Hi all, First, thank you for porting great software and thank you for using my patch. This archive contains an individual patch files and a modified Makefile for virtualbox-ose 3.1.6_3. Please select an options you want before building. And make it by normal way. I tested the binary on FreeNAS 0.7.1 stable (FreeBSD 7.2-RELEASE-p7 amd64/i386 kernel) and FreeNAS 0.7.2 devel (FreeBSD 7.3-RELEASE amd64/i386 kernel). What's new? ----------- Fix some bugs. Add modifier hook such as AltGr. Add the ability to parse non-US keymaps. (the code is referred to Hubert Tournier's patch) How to use ---------- # cd /usr/ports/emulators/virtualbox-ose # tar xvf /path/to/vboxvnc-20100421.tar.gz # tar xvf /path/to/vboxint18-20100310.tar.gz (optional) # make config # make It provides an internal VNC server for guest OS console access in VBoxHeadless frontend. Supported Options: -v, -vnc, --vnc on|off Enable (default) or disable the VNC Server -a, -vncaddress, --vncaddress IP address the VNC server will bind to -p, -vncport, --vncport Port number the VNC server will bind to -k, -vnckeymap, --vnckeymap Keyboard mapfile (default: builtin US) -S, -vncsecret, --vncsecret VNC Authentication secret three options at one line is an equivalent option, for example: "-v on", "-vnc on", "--vnc on" are same feature. -v option specify whether VNC server starts in the machine. default is on (enable). -a and -p options specify IP address and port number of VNC server. default IP is wildcard, port is 5900. If you have multiple IPs(NICs) in your system, you can select the listen address of the server. -k option specify the keyboard layout convert from VNC keys to Scancodes. default is US standard 101keys. (I tested only US 101 keyboard) If you want another keyboard, you can spcify the path of kbdmap(5). In the standard installation of FreeBSD, it's located in /usr/share/syscons/keymaps/. for example, "-k /usr/share/syscons/keymaps/jp.106.kbd" uses JP 106 keyboard. -S option specify the password of the VNC server. However, it have security risk in common server. It assumed used with FreeNAS (limited user environment). Please consider the risk by using command line. When starting the VM, the proctitle is changed like below (you can see by "ps axww"): VBoxHeadless: VM: TestVM4 Port: 5900 Auth: off (VBoxHeadless) vboxint18-20100310.tar.gz (optional patch): [PATCH] VirtualBox INT18 patch for gPXE iSCSI boot/install http://lists.freebsd.org/pipermail/freebsd-emulation/2010-March/007540.html -- Regards, Daisuke Aoyama ------=_NextPart_000_002F_01CAE232.968E70C0 Content-Type: application/octet-stream; name="vboxvnc-20100421.tar.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="vboxvnc-20100421.tar.gz" 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 ------=_NextPart_000_002F_01CAE232.968E70C0--