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

xrdp の devel ブランチをビルドする

X11RDP-o-Matic を使って xrdp の devel ブランチをビルドしようとしましたが、エラーでビルド出来ません。
色々調べたけどわからず、github で質問してみました。

Can not build XRDP debel branch.

自作の rootless ブランチを使ったら出来るよーとの事だったので、やってみたけどエラー。
再度質問してみました。

Can not build XRDP debel branch. — metalefty/X11RDP-o-Matic rootless branch.

“–branch devel” オプションが抜けてたらしい。ありがとー。

以下の手順で成功しました。

$ git clone --depth 1 -b rootless https://github.com/metalefty/X11RDP-o-Matic.git
$ cd X11RDP-o-Matic/
$ ./X11rdp-o-matic.sh --branch devel --justdoit

Raspberry Pi 3 Model B で 5GHz の Wi-Fi を使う

Raspberry Pi 3 Model B ネタです。

電源さえあれば使えるように無線 LAN を使いたいのですが、残念ながら内蔵無線 LAN は 2.4GHz のみで 5GHz が使えません。
我が家では電子レンジや付近の干渉が多いため、5GHz じゃないと使いものになりません。
このため、以前購入していた ELECOM WDC-433DU2HBK を使うことにしました。

まず、ネットで検索してみると WDC-433DU2HBK のチップセットは RTL8811AU らしいのですが、Raspberry Pi の標準のカーネルモジュールには含まれていないようです。RTL8812AU 用のモジュールで対応できるようです。

通常の Xubuntu であれば、linux-headers をインストールすれば、簡単にモジュールをビルドするためのファイルがインストールできるのですが、Raspberry Pi ではちょっと手間をかける必要があるようです。

参考 : カーネルモジュールのコンパイル – RTL8812AUとMT7610U (Raspberry Pi) [メモ]
参考 : Ubuntu 16.04 LTSで、BUFFALO WI-U3-866D を使う

最新のファームウェアとカーネルに更新

$ sudo apt-get update; sudo apt-get upgrade -y
$ sudo apt-get install -y rpi-update
$ sudo rpi-update
$ sudo reboot

カーネルソースを取得

$ sudo apt-get install curl build-essential bc git
$ FIRMWARE_REV=`cat /boot/.firmware_revision`
$ KERNEL_REV=`curl -L https://github.com/Hexxeh/rpi-firmware/raw/${FIRMWARE_REV}/git_hash`
$ echo Firmware Rev: ${FIRMWARE_REV}
$ echo kernel Rev  : ${KERNEL_REV}
$ curl -L https://github.com/Hexxeh/rpi-firmware/raw/${FIRMWARE_REV}/Module.symvers >Module.symvers
$ curl -L https://github.com/Hexxeh/rpi-firmware/raw/${FIRMWARE_REV}/Module7.symvers >Module7.symvers
$ curl -L https://github.com/raspberrypi/linux/archive/${KERNEL_REV}.tar.gz >rpi-linux.tar.gz
$ sudo -s
# HOME=$(pwd)
# cd /usr/src
# mkdir rpi-linux
# cd rpi-linux
# tar --strip-components 1 -xf ${HOME}/rpi-linux.tar.gz
# modprobe configs
# gunzip -c /proc/config.gz >.config
# cp $HOME/Module7.symvers Module.symvers
# time make modules_prepare
# ln -sv /usr/src/rpi-linux /lib/modules/$(uname -r)/build

モジュールをビルド・インストール

# cd /usr/src
# git clone https://github.com/gnab/rtl8812au.git
# cd rtl8812au/
# sed -i 's/\(CONFIG_PLATFORM_I386_PC = \)y/\1n/' Makefile
# sed -i 's/\(CONFIG_PLATFORM_ARM_RPI = \)n/\1y/' Makefile
# make
# make install
# echo 8812au> /etc/modules-load.d/8812au.conf
# echo "options 8192cu rtw_power_mgnt=0 rtw_enusbss=1 rtw_ips_mode=1"> /etc/modprobe.d/8812au.conf
# reboot

Raspberry Pi 3 model B に Xubuntu 16.04 をインストール

子供へのサービスで、ちょこっと大阪日本橋のシリコンハウスというお店へ行ってきました。
子供の目当てはLEDネームプレート。パソコンを使って好きな文字列を登録して遊んでいる。
なかなか面白いものです。

さて、モノのついでと言ってはなんですが、ここまで運転してきた自分への慰労の意味もあり、以前から欲しかった Raspberry Pi を購入しました。
特に目的は決まっていないのですが、いじっているうちに何か見つけると思います。
まずは手に入れて、失敗したり、限界を感じたりする事自体が楽しいと期待しています。

Xubuntu 16.04 のインストールに関しては、以下を参考にしました。
Ubuntu Weekly Recipe 第421回 Raspberry Pi3とXubuntu 16.04 LTS

準備するもの
・システムのインストール作業用のパソコン(Xubuntu 16.04)
・microSDHC 16GB or 32GB
・Raspberry Pi 3 Model B
・HDMI接続可能なモニタ(デジタルテレビ)
・USBキーボード + マウス
・LANケーブル
・HDMIケーブル

.xz 形式の解答は xz コマンドで出来るようです。
ダウンロード/ にダウンロードした場合、SDカードが /dev/sdb の場合は以下のようにすれば、インストール完了です。

$ cd ~/ダウンロード
$ xz -dv xubuntu-16.04-desktop-armhf-raspberry-pi.img.xz
$ dd bs=1M if=xubuntu-16.04-desktop-armhf-raspberry-pi.img of=/dev/sdb

その後、GParted を使って、システムパーティションを 4GB を残して拡張してから、SWAP パーティションを作成しました。

Raspberry Pi に microSDHC カードを挿入ます。
Xubuntu の起動時には GUI による言語の選択や地域の設定と若干の追加インストールがあるので、モニタとキーボード・マウスとLANケーブルを接続しておきます。
最後に microUSB 端子の電源を差し込めば起動です。

言語の選択、地域の選択、ユーザー名・ユーザーID・パスワードの設定を行うと、アップデートが実行されますが、アップデートはリポジトリを国内のものに修正してからの方が良いと思われるので、キャンセルした方が良いようです。

ログイン画面が表示されるので、ログインして「ターミナルエミュレーター」を起動します。
そして、以下のコマンドでスワップパーティションを有効にしてファームウェアを更新します。

$ sudo mkswap -L swap1 /dev/mmcblk0p3
$ sudo vi /etc/fstab

以下を追加。

LABEL=swap1     swap            swap    defaults          0       0
$ sudo rpi-update
$ sudo reboot

再度ログインして「ターミナルエミュレーター」を起動して、コマンドを実行します。

$ sudo vi /etc/apt/sources.list

以下のように修正。

deb http://jp.archive.ubuntu.com/ports/ xenial main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse

deb http://jp.archive.ubuntu.com/ports/ xenial-security main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse

deb http://jp.archive.ubuntu.com/ports/ xenial-updates restricted main multiverse universe
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial-updates restricted main multiverse universe

deb http://jp.archive.ubuntu.com/ports/ xenial-backports restricted main multiverse universe
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial-backports restricted main multiverse universe
$ sudo apt-get update
$ sudo apt-get -y upgrade
$ sudo apt-get -y install snapd
$ sudo apt-get -y install $(check-language-support)
$ sudo reboot

xrdp で xorgxrdp を使う – ビルド編

さて、遅くなりましたが、予告していたビルド手順です。
ビルドは以下の環境で行いました。

・Xubuntu 16.04 amd64
・X11RDP-o-Matic

$ sudo apt-get install git xserver-xorg-dev
$ cd
$ git clone --depth 1 -b devel https://github.com/scarygliders/X11RDP-o-Matic.git
$ cd X11RDP-o-Matic/
$ sudo X11rdp-o-matic.sh --nox11rdp --justdoit
$ cd work/xrdp-0.9.0+master/
$ sudo rm -rf xorgxrdp/
$ sudo git clone --depth 1 -b master https://github.com/neutrinolabs/xorgxrdp.git
$ sudo ./bootstrap
$ sudo ./configure
$ sudo make
$ sudo make install

以上です。

次は設定です。

PHP の isset() と array_key_exists()

以下の様な変数で、入力値の初期値を設定しようとしました。

var $field = array(
    array( "name" => "date", "input" => "text", "default" => null )
);

$field[ $n ][ ‘default’ ] が設定されていたら初期値として使おうとしたのですが、isset( $field[ $n ][ “default” ] ) とすると、null が設定されている場合に false となってしまいます。
色々調べたのですが、こういう場合は array_key_exists( $field[ $n ][ “default” ] ) とすれば良いようです。