Windows上でX-Windowアプリを表示するためのXサーバ VcXsrv


Windows上でX-Windowsアプリを表示させるために使うXサーバソフトウェアとして、「Xming」が有名である。

しかし、Xmingの最近のバージョンは寄付者向けリリースのみとなっている。
他にないものか、と探してみると「VcXsrv Windows X Server」というものがあった。

こちらは、Visual Studio 2013 Express Editionでコンパイルされており、64bit版バイナリも提供されている。
また、sourceforgeにて、ソースコードも公開されているので改造することもできる。

とりあえず、インストールしてみて、Xmingと使い比べてみたところ、思いの外、VcXsrvは好成績だった。

比較手法としては、VcXsrvを:0で起動し、Xmingを:1で起動し、他のLinuxサーバ上から、同じアプリをそれぞれ表示させる、というものを取ってみた。

「gnome-terminal」
terminal
左:VcXsrv、右:Xming

Xmingは小さく表示されてしまっている。
また、タスクバーの表示は下記のようになる。
taskbar
左:VcXsrv、右:Xming、(真ん中:コマンドプロンプト)

VcXsrvはアプリのアイコンがきちんと表示されるが、xmingでは「X」のアイコンで代用される。

「firefox」
VcXsrvの場合
vc-firefox

Xmingの場合
xming-firefox

VcXsrvの場合、タイトルバーもきちんと表示されている。
Xmingでは表示できていない。

Windows Serverを複数ユーザで利用時、各ユーザ毎にXmingを起動しTeraTermを使う手法


Windows Serverにリモートデスクトップ(RDP)でログインし、そこからTeraTermを使ってLinuxサーバにログインする、って運用をしてるところは結構あると思います。

で、X-Windowのアプリを表示したい時に、フリー版のXmingを使おうとしたら、思うように使えない、という事態になったりします。

フリー版のXming ver6.9.0.31を普通にインストールすると、そのショートカットは、全ユーザ共通で、Xサーバを「:0」で起動する設定になっています。

このため、Windows Server上で誰かがXmingを起動すると、他の人は番号競合のためXmingを起動できなくなってしまいます。

回避方法は簡単で、番号が被らないようにXmingを起動する、ということです。

Xmingの標準ショートカットは以下のものです。

"C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow

これを、例えば「:1」で起動する様に変更します。

"C:\Program Files (x86)\Xming\Xming.exe" :1 -clipboard -multiwindow


(ちなみに、「:51000」とかでも起動し動作しました)

また、この設定の場合、SSHを使ったX11 forwardingを使った場合は表示できますが、Linuxサーバ上で「export DISPLAY=WindowsサーバIP:1.0」といったような形で表示させようとした場合、拒否されてしまいます。

そういった場合は下記の様な形で「-ac」オプションをつけます。

"C:\Program Files (x86)\Xming\Xming.exe" :1 -clipboard -multiwindow -ac


(-acは、アクセスコントロールをしない、という設定なので、予期しないホストからXアプリが飛んでくる可能性はありますが、まぁ、気にしない、ということでこの設定にしています。)

なお、最近、一般向けには公開されていないXmingではなく、VcXsrvを使う場合でも、オプションは同様になります。(VcXsrvについては「Windows上でX-Windowアプリを表示するためのXサーバ VcXsrv」を参照のこと)

で・・・これで解決かといえば、そうでもありません。

Tera TermのSSHポート転送の機能に、「Xクライアントアプリケーションの転送」という項目があります。
これは、SSH X11 forwardingとも呼ばれる機能で、Linuxサーバ上ではlocalhost扱いなんだけど、実際には、SSHを使用してWindows上に表示される、というものです。

Tera Termの場合、下記の様にON/OFFのみが選択できます。
teraterm

この場合、Tera Termでは、Windows上のXサーバの「:0」に対して画面を出力しようとします。

このため、せっかくXming側を複数立てても、「:0」を起動させている人のところにXアプリの画面が集まってしまいます。

(以下は、2015/03/02に修正)

回避方法は3つ。

その1:指定できるputtyを使う
出力先をGUIで設定できるputtyを使用する。
設定は下記のX display locationに例えば「:1.0」と入力します。
putty

その2:環境変数でDISPLAYを指定してTeraTermを起動する
version 4.86(2015/02/28リリース)より前のTera Termの場合、TeraTermの起動方法を工夫することで指定ができます。

標準の設定GUIでは設定できませんが、Windowsのコマンドプロンプトで環境変数DISPLAYを設定することによって、出力先を指定することができるようになっています。
(機能追加要望を出したら教えてもらった)

なので、以下のようなバッチファイルを書くと、指定したところにXアプリが出力できるようになります。

@echo off
set DISPLAY=:1.0
"C:\Program Files (x86)\teraterm\ttermpro.exe" Linuxサーバ名 /ssh-X

その3:TeraTermの起動オプションで指定する(ver4.86以降)
TeraTerm ver 4.86から、/ssh-Xオプションが拡張され、DISPLAYを指定できるようになりました。
(TeraTermのマニュアル)

以下の様な形で「/ssh-X」の後にスペースを入れず、連続して出力先を記述します。

"C:\Program Files (x86)\teraterm\ttermpro.exe" Linuxサーバ名 /ssh-Xlocalhost:1.0

DynDNSの仕組みが若干変わった


2023/07/10追記

この記事で触れているddclientですが、2023年7月5日付けで更新終了となりました。

代替としてinadyn , dnsupdate が紹介されていました。


昔はDynDNSと呼ばれていた「Dyn」というDNSサービスがあります。

固定じゃないIPアドレスでも、特定のホスト名でアクセスできるようにしてくれるRemote Access(DynDNS)を、以前は無料で提供していました。
今は、年25ドルになっています。

が・・・実は、無料だった当時、寄付をすると上位サービスにアップグレード、というキャンペーンをやっていました。
このアップグレードしたユーザは、現在も、無料で使えていたりします。

それは、さておき、Dynに久々にログインしてみたところ、以下の様にお知らせが出てきました。

login

You have not generated an updater client key!
Please generate a key for use with update clients to help keep your account credientals secure.

いままで、DynDNSに登録したIPアドレスを変更する際、クライアントソフトにユーザ名/パスワードを登録して行っていたものを、Dynの管理画面でクライアントキーを発行し、それをクライアントソフトに登録する、という形に変更したようです。

が・・・Linuxの場合、Dynのクライアント一覧に掲載されているソフトが、GUI環境向けの「Dyn Updater for Ubuntu Linux」だけがクライアントキーに対応していないように見えるのは気のせいか??
(2014/09/25リリースのver5.2に「Support secure update key for account.dyn.com in place of account credentials.」とある)

ddclient」の方は、2013/12/26リリースのver3.8.2が最新のようで、まだ対応していない。

そんなわけで、新しい仕組みができたけど、まだ使えない、という微妙な感じになりました^^;;;

Kobo Touch/gloをAndroid化する・・・ことの覚え書き



2013年の話ではありますが、Kobo Touchの2代目と、Kobo gloをAndroid化する、という話があります。

あるのですが、日本語で、その起源について、きちんと書かれているページがないようなので、メモとして記載します。

まず、このネタの起点はMobilereadのフォーラム「Android on Glo」です。

投稿者のSyreKronさんが、ぐぐってたら、ドイツのheckeさんのblog「collector {dt.:Sammler}」を発見。
ここでは、ドイツで販売されているE-Ink Readerの「Tolino Shine」用にLinux kernelをコンパイルしてる。
このToline ShineはAndroid 2.3で動作しているのだが、上記Blogを見ると、ハードウェア構成がKobo gloに似ている。

試しにTolino Shine向けのAndroidイメージをKogo gloに入れてみたら、Androidがちゃんと動いているように見えるよ!

という報告が第1弾。

これを受けて、いろんな人が、Kobo gloのキーをちゃんと認識できるようにしたり、と、カスタマイズを行っていき、それをとりまとめたのが、MarekGibekさんの「New image for Kobo Touch」で、それをさらに改良して、新バージョン「Android for Kobo v2 – improved reading mode(2014/08/07)」がある。

といったところ。

Kobo Touch(N705C)と、Kobo Glo用のfirmwareが上記で配布されている。
日本でKobo Touchが発売された頃のものは、Kobo Touch(N705B)なので、N705Cのものは使用できない。

MobileReadフォーラム「Android on Kobo: “Tips and Apps”」に、Kobo E-Ink Reader上でAndroidを動かす場合の情報源について、リンクが紹介されている。

SmartQ ZWatch同等品 SpeedUp SmartWatch



SmartQ ZWatchのカスタムfirmwareとかあるのかな?と探していたら、インドネシアのSpeedUp社から販売されている「SpeedUp Smart Watch」というのが、同等品とのこと。

実際、「firmwareページ」にあるマニュアルを見てみると、SmartQ ZWatchとほぼ同じように見える。

Zwatchと異なり、「Sync用ソフトウェアSpeedUp SmartWatchがGoogle Playで公開されている、というのが良い点かも?
(APKファイル直リンクでの配布もある)

SpeedUp SmartWatchのfirmware v1.6をダウンロードし、/system/build.propを開いてみると、以下の様な内容だった。

# begin build properties
# autogenerated by buildinfo.sh
ro.build.id=KRT16M
ro.build.display.id=V1.6_05-06-2014
ro.build.version.incremental=eng.1012337.140605.114853
ro.build.version.sdk=19
ro.build.version.codename=REL
ro.build.version.release=4.4
ro.build.date=Thu Jun  5 11:48:53 CST 2014
ro.build.date.utc=1401940133
ro.build.type=userdebug
ro.build.user=SpeedUp
ro.build.host=1012337
ro.build.tags=test-keys
ro.product.model=SW-1
ro.product.brand=SpeedUp SmartWatch
ro.product.name=SpeedUp SmartWatch SW-1
ro.product.device=s2122b
ro.product.board=SpeedUp SmartWatch SW-1
ro.product.cpu.abi=mips
ro.product.cpu.abi2=mips
ro.product.manufacturer=SpeedUp Technology
ro.product.locale.language=en
ro.product.locale.region=US
ro.wifi.channels=13
ro.board.platform=xb4780
# ro.build.product is obsolete; use ro.product.device
ro.build.product=SpeedUp SmartWatch SW-1
# Do not try to parse ro.build.description or .fingerprint
ro.build.description=full_s2122b-userdebug 4.4 KRT16M eng.1012337.140605.114853 test-keys
ro.build.fingerprint=SmartQ/full_s2122b/s2122b:4.4/KRT16M/eng.1012337.140605.114853:userdebug/test-keys
ro.build.characteristics=tablet
# end build properties

#
# ADDITIONAL_BUILD_PROPERTIES
#
dalvik.vm.heapstartsize=5m
dalvik.vm.heapgrowthlimit=48m
dalvik.vm.heapsize=128m
dalvik.vm.heaptargetutilization=0.75
dalvik.vm.heapminfree=512k
dalvik.vm.heapmaxfree=2m
ro.sf.lcd_density=160
persist.sys.timezone=Asia/Jakarta
testing.mediascanner.skiplist=/storage/host-udisk/,/storage/udisk/
wifi.interface=wlan0
wifi.supplicant_scan_interval=15
ro.telephony.call_ring.multiple=0
mobiled.libpath=/system/lib/libmobiled.so
ro.sf.hwrotation=180
ro.config.low_ram=true
keyback_long_press_time=1000
debug.velocitytracker.strategy=int1
ro.opengles.version=131072
ro.carrier=wifi-only
ro.config.notification_sound=OnTheHunt.ogg
ro.config.alarm_alert=Alarm_Classic.ogg
persist.sys.dalvik.vm.lib=libdvm.so
dalvik.vm.lockprof.threshold=500
net.bt.name=SmartQ-SW-1
dalvik.vm.stack-trace-file=/data/anr/traces.txt

ちなみに、SmartQ ZWatchの最新firmware v3.7の/system/build.propは以下の様になっている。

# begin build properties
# autogenerated by buildinfo.sh
ro.build.id=KRT16M
ro.build.display.id=V1.6_05-06-2014
ro.build.version.incremental=eng.1012337.140605.114853
ro.build.version.sdk=19
ro.build.version.codename=REL
ro.build.version.release=4.4
ro.build.date=Thu Jun  5 11:48:53 CST 2014
ro.build.date.utc=1401940133
ro.build.type=userdebug
ro.build.user=SpeedUp
ro.build.host=1012337
ro.build.tags=test-keys
ro.product.model=SW-1
ro.product.brand=SpeedUp SmartWatch
ro.product.name=SpeedUp SmartWatch SW-1
ro.product.device=s2122b
ro.product.board=SpeedUp SmartWatch SW-1
ro.product.cpu.abi=mips
ro.product.cpu.abi2=mips
ro.product.manufacturer=SpeedUp Technology
ro.product.locale.language=en
ro.product.locale.region=US
ro.wifi.channels=13
ro.board.platform=xb4780
# ro.build.product is obsolete; use ro.product.device
ro.build.product=SpeedUp SmartWatch SW-1
# Do not try to parse ro.build.description or .fingerprint
ro.build.description=full_s2122b-userdebug 4.4 KRT16M eng.1012337.140605.114853 test-keys
ro.build.fingerprint=SmartQ/full_s2122b/s2122b:4.4/KRT16M/eng.1012337.140605.114853:userdebug/test-keys
ro.build.characteristics=tablet
# end build properties

#
# ADDITIONAL_BUILD_PROPERTIES
#
dalvik.vm.heapstartsize=5m
dalvik.vm.heapgrowthlimit=48m
dalvik.vm.heapsize=128m
dalvik.vm.heaptargetutilization=0.75
dalvik.vm.heapminfree=512k
dalvik.vm.heapmaxfree=2m
ro.sf.lcd_density=160
persist.sys.timezone=Asia/Jakarta
testing.mediascanner.skiplist=/storage/host-udisk/,/storage/udisk/
wifi.interface=wlan0
wifi.supplicant_scan_interval=15
ro.telephony.call_ring.multiple=0
mobiled.libpath=/system/lib/libmobiled.so
ro.sf.hwrotation=180
ro.config.low_ram=true
keyback_long_press_time=1000
debug.velocitytracker.strategy=int1
ro.opengles.version=131072
ro.carrier=wifi-only
ro.config.notification_sound=OnTheHunt.ogg
ro.config.alarm_alert=Alarm_Classic.ogg
persist.sys.dalvik.vm.lib=libdvm.so
dalvik.vm.lockprof.threshold=500
net.bt.name=SmartQ-SW-1
dalvik.vm.stack-trace-file=/data/anr/traces.txt

/system/appのファイルは、Zwatchから「cn.yunzhisheng.assistant.smartdevices.apk」と「com.tencent.mm.apk」が抜かれているという感じだった。

ぱっと見は流用できそうな感じだけど、果たしてどうなのやら??