Ubuntu 18.04 をインストールしてみたのだが

時は満ちた、Ubuntu 18.04 をインストールするべ。
と、安易に考えて開始しましたが、罠が待っていました。
助けて頂いたページは以下です。

18.04 LTS インストールできましたが、起動途中でフリーズしてしまいます

これは拡散せねば。

ちなみに 16.04 では Xubuntu + DockbarX を使って Windows ライクにしていました。
18.04 では  DockbarX が見つからなかったため、検討の結果 Ubuntu にしました。
デスクトップ環境は GNOME に(やっと)戻っています。

VS CODE で MSゴシックを使うのに手間取った話

なんだかエディタの桁ずれがあるので、フォントを変更しようとしたのですが、思いの外てこずりました。
MSゴシックを使用したかったのですが、なぜかプロポーショナルフォントになってしまいました。
MSゴシックはフォント名が面倒くさいのが理由でした。

MS(全角) (半角)ゴシック(全角)

と、半角スペースを挟むんですね!

何故じゃ?

Stl-14HP012-C-CDMM で SSD に Windows 10 を移動した話

いやー、久々に焦りましたが、何とかなった話です。

久しぶりにパソコン工房松江店を覗いたところ、Stl-14HP012-C-CDMM が展示されていました。
Windows 10 Home 64bit, Celeron N3450 (4コア), 4GB メモリ、eMMC 32GB です。
15インチではなく 14インチなのも、自分としては評価できる点です。
7mm 厚なら 内蔵ディスクも増設できるとのことなので、USB ディスクケースに入れている SAMSUNG 840 120GB を移して使おうと考えて、購入することにしました。
店員さんが動作確認をしてくれて、問題ないとのことでしたので、米子まで持って帰りました。 “Stl-14HP012-C-CDMM で SSD に Windows 10 を移動した話” の続きを読む

PHP で JSON を出力する

保守しているサーバーの PHP は、なんとバージョン 5.2.2 という生きる化石のようなシロモノでした。
一応 json_encode 関数はあるのですが、JSON_PRITTY_PRINT や JSON_UNESCAPED_UNICODE オプションが使えないため、とても人間が読みやすいものは出力できません。

じゃあ、どうしようか?
まぁ1時間ぐらいで自作出来るんじゃないの?

と、作ったわずか40行程の関数です。

よかったら使って下さい。

function json_print( $data, $indent=0, $next='' ) {
	if ( ! is_array( $data ) ) {
		if ( is_bool( $data ) ) {
			printf( "%s%s\n", $data ? 'true': 'false', $next );
			return;
		}

		if ( is_numeric( $data ) ) {
			printf( "%s%s\n", $data, $next );
			return;
		}

		printf( "\"%s\"%s\n", preg_replace( '/\\n/', '\\n', preg_replace( '/"/', '\\"', $data ) ), $next );
		return;
	}

	if ( array_values( $data ) === $data ) {
		printf( "[\n" );

		for ( $n = 0; $n < count( $data ); $n++ ) {
			printf( str_repeat( ' ', ( $indent  + 1 ) * 4 ) );
			json_print( $val, $indent + 1, ( $n == ( count( $data ) - 1 ) ) ? '' : ',' );
		}

		printf( "%s]%s\n", str_repeat( ' ', $indent * 4 ), $next );
		return;
	}

	printf( "{\n", str_repeat( ' ', $indent * 4 ) );

	$keys = array_keys( $data );

	for ( $n = 0; $n < count( $keys ); $n++ ) {
		printf( "%s\"%s\" : ", str_repeat( ' ', ( $indent  + 1 ) * 4 ), $keys[ $n ] );
		json_print( $data[ $keys[ $n ] ], $indent + 1, ( $n == ( count( $keys ) - 1 ) ) ? '' : ',' );
	}

	printf( "%s}%s\n", str_repeat( ' ', $indent * 4 ), $next );
}

使い方はこれだけです。

json_print( $data );

Xubuntu 16.04 + xrdp 0.9.1-7 + VS Code 1.11 でカーソルキーが使えなかった対応

Xubuntu 16.04 + xrdp 0.9.1-7 に、Windows のリモートデスクトップでログインして VS Code を使っていたのですが、1.11 にアップデートしたところ、カーソルキーが使えませんでした。

ほぼ常に使用しているので、すごく焦りました。
とりあえずは 1.10 にダウングレードすることで対応できました。

その後調べた結果、リモートデスクトップの場合に発生する現象であることが判明し、VS Code の設定に以下を追加して対応できました。

"keyboard.dispatch": "keyCode"

助かりました。

参考 : Delete, Insert, Home, End, PgUp, PgDn, and arrow keys no longer work editor in 1.11 #24107

Xubuntu 16.04 で xrdp_0.9.1-6 をビルドした

Ubuntu 17.04 向けの xrdp パッケージが 0.9.1-4 から 0.9.1-6 へ更新されていたので、16.04 向けにビルドしてみました。

sudo apt-get install build-essential devscripts
mkdir build
cd build/
dget -u https://launchpad.net/ubuntu/+archive/primary/+files/xrdp_0.9.1-6.dsc
cd xrdp-0.9.1/
vi debian/control
- devhelper (>= 10),
+ devhelper (>= 9.2),
dpkg-buildpackage -r -uc -b
cd ..
sudo dpkg -i xrdp_0.9.1-6_amd64.deb xorgxrdp_0.9.1-6_amd64.deb

これで大丈夫でした。
システムを reboot しても大丈夫。
ついでに日本語キーボードが正しく検出されない問題も解決していました。

Ubuntu 16.04 で xrdp_0.9.1-4 をビルドした

Ubuntu 17.04 向けの xrdp パッケージの更新が行われていたので、16.04 向けにビルドしてみました。

sudo apt-get install build-essential devscripts
mkdir build
cd build/
dget -u https://launchpad.net/ubuntu/+archive/primary/+files/xrdp_0.9.1-4.dsc
cd xrdp-0.9.1/
vi debian/control
- devhelper (>= 10),
+ devhelper (>= 9.2),
dpkg-buildpackage -r -uc -b
cd ..
sudo dpkg -i xrdp_0.9.1-4_amd64.deb xorgxrdp_0.9.1-4_amd64.deb
sudo systemctl restart xrdp.service

これで大丈夫かと思ったのですが、システムを reboot すると xrdp が起動されていませんでした。
サービスを起動しようとするとエラーが発生していました。

Feb  2 01:16:17 taniguchi-home systemd[1]: Failed to start xrdp session manager.
Feb  2 01:16:17 taniguchi-home systemd[1]: Dependency failed for xrdp daemon.
Feb  2 01:16:17 taniguchi-home systemd[1]: xrdp.service: Job xrdp.service/start failed with result 'dependency'.
Feb  2 01:16:17 taniguchi-home systemd[1]: xrdp-sesman.service: Unit entered failed state.
Feb  2 01:16:17 taniguchi-home systemd[1]: xrdp-sesman.service: Failed with result 'resources'.
Feb  2 01:16:24 taniguchi-home systemd[1]: Stopped xrdp daemon.

調べてみたところ、/lib/systemd/system/xrdp.service に以下が追加されていたため、先に xrdp-sesman を起動しようとします。

Requires=xrdp-sesman.service
After=network.target xrdp-sesman.service

しかし、再起動時に xrdp-sesman を実行する時点では /run/xrdp/ が存在しないため、起動できません。
結局、以下の2行を /lib/systemd/system/xrdp.service から /lib/systemd/system/xrdp-sesman.service へ移動しました。

PermissionsStartOnly=true
ExecStartPre=/bin/sh /usr/share/xrdp/socksetup

これで大丈夫かと思ったのですが、再起動してみると xrdp が立ち上がっていません。
なぜか以下のコマンドの実行も必要でした。

sudo systemctl enable xrdp.service
sudo systemctl enable xrdp-sesman.service
sudo systemctl start xrdp.service

なんか、パッケージのテストが不十分で残念ですね。

Ubuntu 16.04 で最新の xrdp をビルドした

最近、X11RDP-o-Matic を使うと、ビルドエラーになってしまって、最新の xrdp に更新できません。
なんとかならないかなと色々調べてみたら、launchpad で Ubuntu 向けのビルドを見つけました。

https://launchpad.net/ubuntu/+source/xrdp

Ubuntu 16.04 で、開発中の 17.04 向けの最新パッケージをビルドできれば良いなと考えて、調べてみたら以下のページを見つけました。

http://gihyo.jp/admin/serial/01/ubuntu-recipe/0152

上記記事にほぼ従ったのですが、不足パッケージについては debian/control の内容を参考にしたり、ビルドを行ってエラーになったら対応する事を繰り返したほうが良さそうです。

sudo apt-get install build-essential devscripts
mkdir build
cd build/
dget -u https://launchpad.net/ubuntu/+archive/primary/+files/xrdp_0.9.1~20161126+git589b29f-2.dsc
cd xrdp-0.9.1~20161126+git589b29f/
vi debian/control
- devhelper (>= 10),
+ devhelper (>= 9.2),
dpkg-buildpackage -r -uc -b
cd ..
sudo dpkg -i xrdp_0.9.1~20161126+git589b29f-2_amd64.deb xorgxrdp_0.9.1~20161126+git589b29f-2_amd64.deb
sudo vi /etc/xrdp/xrdp.ini
-autorun=X11rdp
+autorun=Xorg
sudo systemctl restart xrdp.service

そういえば、ipv6 を無効にすると xrdp が起動できませんでした。
ローカルの Xubuntu でハマってしまいました、
コンパイルオプションに “–enable-ipv6” が指定されているのが原因です。
どうしても ipv6 を無効にした状態で xrdp を使いたい場合は、ビルドする前にファイルを修正して、コンパイルオプションを指定している行を削除します。

vi debian/rules
-            --enable-ipv6 \

Raspberry Pi の Xubuntu で xfce4-dockbarx-plugin を使えるようにする

Raspberry Pi の Xubuntu では、xfce4-dockbarx-plugin がなぜかインストールできなかったので、依存関係を解決してビルドしたところ、正常に動作しました。

sudo addpapt-repository ppa:dockbar-main/ppa
sudo vi /etc/apt/sources.list.d/dockbar-main-ubuntu-ppa-xenial.list
-#deb-src http://ppa.launchpad.net/dockbar-main/ppa/ubuntu xenial main
+deb-src http://ppa.launchpad.net/dockbar-main/ppa/ubuntu xenial main
sudo apt-get update
sudo apt-get -y install debhelper libvala-dev valac libglib2.0-dev libgtk2.0-dev xfce4-panel-dev dockbarx-dockx dockbarx
mkdir build
cd build/
apt-get source xfce4-dockbarx-plugin
cd xfce4-dockbarx-plugin-0.4.1/
vi debian/control
-Build-Depends: debhelper, libvala-0.28-dev, valac-0.28, libglib2.0-dev, libgtk2.0-dev, xfce4-panel-dev, dockbarx-dockx, dockbarx
+Build-Depends: debhelper, libvala-0.30-dev, valac, libglib2.0-dev, libgtk2.0-dev, xfce4-panel-dev, dockbarx-dockx, dockbarx
dpkg-buildpackage -rfakeroot -uc -b
cd ../
sudo dpkg -i xfce4-dockbarx-plugin_0.4.1-1~webupd8~xenial2_armhf.deb

インストールが完了します。
ついでに、blueman というアプレットが異常終了するので、起動しないように設定しておきます。

blueman-off

一旦ログアウトして、ログインし直します。xfce4-dockbar-plugin をパネルに追加します。

dockbarx-add-1

dockbarx-add-2

dockbarx-add-3