ラズベリーパイとLCD-USB7XW/BとLCD-USB10XB-T (後編: Part 2)

この記事ではラズベリーパイのデスクトップ版Linux (ラズビアン)で、かつて、i-oデータ社が販売していたUSB2接続の液晶LCDモニタの「LCD-USB7XW/B」と「LCD-USB10XB-T」の設定方のPart-2を紹介しています。

三画面設定(16bpp)

ステップ-4: X-Windowsの設定

ラズベリーパイのHDMI出力端子は標準だと/dev/fb0のデバイス・ファイルに関連付けられるので、/boot/config.txtの設定などでHDMI出力を無効にしていない状態であれば、LCD-USB7XWやLCD-USB10XB-TのUSBモニターは/dev/fb1のデバイス・ファイルに関連付けられます。 なので、Xウインドウ画面として使いたい場合はX.Orgの設定に/dev/fb1用の項目を加える必要があります。

Part1の最後にプレビューとしても載せましたが、ラズベリーパイのHDMIかUSBモニターどちらかだけを使う一画面設定だとXウインドウの設定に7行付け足すだけで設定完了になります (ステップ4-1)。 でも、HDMIとUSBモニターの両方使う二画面設定の場合はもう少し複雑になります。

マイクロソフトのWindows10などで複数のモニターを繋げた場合、「複製」ではなく「拡張」モードを選ぶとマウスを使ってウインドウを違う画面へと動かす事が出来ます。 Xウインドウの場合だと、同じ様な事をするのにXウインドウの『Xinerama』という拡張機能を使う必要があるのですが、()現在のところ、「すべてのモニターが同じ色深度 (Color Depth) 設定でないといけない」という困った制限があります。

LCD-USB7XWとLCD-USB10XB-Tの色深度をアイ・オー・データの取説や仕様書などのPDF書類では確認できなかったのですが、udlfbドライバーには両モニター共に色深度16bpp(ハイカラー)で認識されるので、 Xinerama拡張の機能を使いたい場合はラズベリーパイのHDMI出力も16bppになる様に設定する必要があります (ステップ4-2)。

しかし、最近では16bppといった低い色深度が上限といったモニターも珍しいと思うので、HDMI側のモニターは16bppではなくもっと高い色深度で使いたい場合は「Xinerama」拡張を無効にします (なので、マウスでウインドウドラッグして他の画面へと移動させることはできません)。 この場合、()現在のラズビアンで標準で有効になっているデスクトップの仕様の関係もあって、ステップ-5のウインドウ・マネージャー関連の設定も追加で必要になります (ステップ4-3)。

  1. 一画面設定 (ラズベリーパイHDMI/USBモニターどちらか)
  2. 二画面設定 (色深度16bpp限定の拡張スクリーン)
  3. 二画面設定 (別スクリーン)

ステップ-4-1: 一画面設定 (ラズベリーパイHDMI/USBモニターどちらか)

/usr/share/X11/xorg.conf.d/99-fbturbo.conf のファイルにある、次の様な「Option "fdev" "/dev/fb0"」という行を含むデバイス・セクション(Section "Device")の前に

Section "Device"
        Identifier      "Allwinner A10/A13 FBDEV"
        Driver          "fbturbo"
        Option          "fbdev" "/dev/fb0"
        Option          "SwapbuffersWait" "true"
EndSection

次の内容を追加します:

Section "Device"
        Identifier      "DisplayLink"
        Driver          "fbturbo"
        Option          "fbdev" "/dev/fb1"
        Option          "ShadowFB" "off"
       Option          "SwapbuffersWait" "true"
EndSection

これで、起動時にLCD-USB7XW/BやLCD-USB10XB-Tが繋がっていれば、優先的にXウインドウのメイン画面として設定され、繋がっていない場合はラズベリーパイのHDMIがメイン画面として設定されます。

LCD-USB7XW/Bの一画面だと、画面サイズが7インチなのでかなり小さいですが、一画面設定だとこれで完了です。

もしも、上の設定を変更した後にXウインドウが立ち上がらなくなったなどという場合はファイルの変更内容の入力ミスという可能性もあるので、次のコマンドでXorgのログ・ファイル /var/log/Xorg.0.log の内容を表示して確認してみてください。

pi@raspberrypi:~ $ more /var/log/Xorg.0.log

ステップ-4-2: 二画面設定 (色深度16bpp限定の拡張スクリーン)

まずは、/boot/config.txt に次の一行を加えてラズベリーパイのHDMI出力の色深度を16bppにします。 既に同じ行がある場合は加える必要はありません。

framebuffer_depth=16

このファイルはラズビアンのブート時に読み込まれてシステムの設定をするのに使われる設定ファイルで、既にある内容を間違って消してしまったり、書き換えてしまったりするとシステムが起動しなくなったり、不安定になってしまう可能性もあるので気を付けて編集してください。

※( ラズベリーパイ本家サイト内にあるconfig.txtのページによると、「/boot/config.txtframebuffer_depthの既定値は16」とあるのですが、(RPi2B+で確認した処) 実際にconfig.txtのファイル内で16に指定しないと色深度は16bppにならないみたいです😕😕。

※過去のフォーラムやブログなどを検索すると、Xウインドウの設定ファイルの特定のセクション内に「DefaultDepth 16」という行を加えると該当するモニターの色深度を16bppに設定出来るという情報が出てきますが、()現在のラズビアンに付いてくるXウインドウ・サーバー(v1.20.4)ではこの設定は無視されている様です。

次に/usr/share/X11/xorg.conf.d/99-fbturbo.conf を次の様に変更しますが、かなりの書き換えになるので、後で戻せる様に、「99-fbturbo.conf-bakup」とか「99-fbturbo.conf-0」といった名前で変更の前のファイルのコピーを作っておく事をお勧めします。

Section "Device" #RPi built-in video
  Identifier "rpi"
  driver "fbturbo"
  Option "fbdev" "/dev/fb0"
  Option "SwapbuffersWait" "true"
EndSection

Section "Device" #USB2.0 DisplayLink
  Identifier "Dysplaylink"
  driver "fbturbo"
  Option "fbdev" "/dev/fb1"
  Option "ShadowFB" "off"
  Option "SwapbuffersWait" "true"
EndSection

Section "Monitor"
  Identifier "lcd-monitor"
EndSection

Section "Monitor"
  Identifier "usb-lcd"
EndSection

Section "Screen"
  Identifier "primary"
  Device "rpi"
  Monitor "lcd-monitor"
EndSection

Section "Screen"
  Identifier "secondary"
  Device "Displaylink"
  Monitor "usb-lcd"
EndSection

Section "ServerLayout"
  Identifier "default"
  Screen 0 "primary" 0 0
  Screen 1 "secondary" LeftOf "screen0"
  Option "Xinerama" "1"
EndSection

この設定だと、ラズベリーパイのHDMI接続の画面が「primary」、USBモニターが「secondary」という名前で設定されて、最後の"ServerLayout"のセクションにある2行:

Screen 0 "primary" 0 0
  Screen 1 "secondary" LeftOf "screen0"

によって、「primary」にスクリーン番号0、「scondary」にスクリーン番号1が割り当てられています。

また、2行目の「LeftOf」は「scondary」の画面をスクリーン番号0の「primary」に左(Left)に配置という意味で次の様な画面配置になります。

LeftOf

LeftOf」以外に「RightOf」(右)、「Above」(上)、「Below」(下)、「Absolute」(絶対的な)、「Relative」(相対的に)というオプションが使えるそうで、最後の「Absolute」と「Relative」は画面の左上の位置を絶対的/相対的座標を指定出来るみたいです。 (詳しくはネット検索か「man xrog.conf」のコマンドの出力内容を参考にしてください。)

その次の行:

  Option "Xinerama" "1"

ではXウインドウのXinerama拡張を有効にしています。

これでHDMI接続のモニターとUSBモニターを繋げた状態でラズベリーパイを起動させれば、二画面の拡張スクリーンとして使う事ができます。

因みに、()現在のラズビアンで標準で「lxpanel」というメニュー・バーが有効になっていますが、このメニュー・バーはメインの画面に一つだけ表示される仕様で、各画面に表示させることは出来ないそうです。 (メニュー・バーがない画面でも右クリックで開くメニューからアプリケーションが選べるはずです。)

全部の画面の色深度が16bppに限定されますが、二画面設定の拡張スクリーン仕様はこれで完了です。

ステップ4-1の最後にも書きましたが、Xウインドウの設定変更後にXウインドウが立ち上がらなくなったという場合は設定ファイルの入力ミスの可能性が高いのでXorgのログ・ファイル /var/log/Xorg.0.log の内容を確認してみてください。


ステップ-4-3: 二画面設定 (別スクリーン)

ステップ4-2で設定した /usr/share/X11/xorg.conf.d/99-fbturbo.conf のファイルとほぼ同じ内容の設定を使いますが、ServerLayoutセクション内の最後の行「Option "Xinerama" "1"」を次の様に変更してXinerama拡張を無効にします。

  Option "Xinerama" "0"

この時点でHDMI画面とUSBモニター両方を繋げたままラズベリーパイを起動した場合、HDMI接続の画面ではXウインドウが起動して問題なく使えると思いますが、USBモニターの方はXウインドウは起動しても壁紙が表示されるくらいで、マウスを持って行ってもポインターがばってんマーク(✖)になります。

しかし、これはXウインドウの設定ではなく、デスクトップの仕様らしいので次のステップでウインドウ・マネージャーの設定を加えます。

もしも、Xウインドウの設定変更後にXウインドウが立ち上がらなくなったという場合は設定ファイルの入力ミスの可能性が高いのでXorgのログ・ファイル /var/log/Xorg.0.log の内容を確認してみてください。


ステップ-5: ウインドウ・マネージャーの設定

(※このステップはスッテプ-4.3の二画面を別スクリーンとして設定する場合のみ必要になります。)

() 現時点でデスクトップ版のラズビアンBusterをインストールした場合、デスクトップ環境は標準で「LXDE」に、ウインドウ・マネージャは「OpenBox」に設定されます。

LXDEは「Lightweight X11 Desktop Environment」の略で、必要になる処理の軽さに重点を置いて開発されているデスクトップ環境で、ラズベリーパイの様な小型PCに最適だそうです。 それが直接の原因なのかは知りませんが、LXDEと関連アプリは(現時点では)複数画面を前提にした開発はされていないみたいです。

ラズベリーパイ本家のフォーラムのスレッドの https://www.raspberrypi.org/forums/viewtopic.php?t=12761 によると、ウインドウ・マネージャーは各スクリーンごとに実行しないといけないらしく、タイムススタンプが の上から23番目のragnarjensenというユーザによる投稿がLXDEの環境内でデスクトップを自動的に開始させる方法を紹介していたので次にそれを使わせてもらいます。

/home/pi/.config/autorun/home/pi/.config/autostartのディレクトリにファイル名の最後(拡張子)が『.desktop』で終わるテキスト・ファイル (例: 10-desktopmgr-autostart.desktop) を追加してLXDEのデスクトップ起動時に自動的に実行するスクリプトを次の様に設定します。

~/.config/autorun/10-desktopmgr-autostart.desktop
~/.config/autostart/10-desktopmgr-autostart.desktop
[Desktop Entry]
Encoding=UTF-8
Name=Desktop autostart for secondary display
Comment=Start the LXDE environment on secondary display
Exec=/home/pi/bin/desktopmgr.sh
OnlyShowIn=LXDE
上のファイル内で指定したシェル・スクリプト ~/bin/desktopmgr.sh は次の様にします。
#!/bin/bash

# Start a window manager on the secondary display.
DISPLAY=:0.1 openbox --config-file $HOME/.config/openbox/lxde-rc.xml &

# Start a terminal.
cd $HOME
DISPLAY=:0.1 lxterminal &

※ユーザー・ホーム(~)に「bin」というディレクトリが存在しない場合は事前にmkdirする必要があります。

※元の投稿にあったpcmanfmに関する行は削除させてもらいました。

個人的には次のコマンドで

pi@raspberrypi:~ $ sudo chmod u+w ~/bin/desktopmgr.sh

シェル・スクリプトをターミナルでコマンドとして実行出来る様にしておいても良いと思います。 こうすると、何かしらの理由でLXDEの起動時にスクリプトが自動実行されなかった場合に自動で実行する事が少し楽になります。

また、上のスクリプト内(4行目)でOpenBoxを呼び出す時に ~/.config/openbox/lxde-rc.xml から設定を読み込む設定になっていますが、今までにOpenBoxのカスタマイズをしていない場合には ~/.config/openbox のディレクトリ自体が存在しないはずなので、次のコマンドでディレクトリを作って /etc/xdg/openbox/ から「lxde-rc.xml」「rc.xml」「menu.xml」の3ファイルをコピーします。

pi@raspberrypi:~ $ mkdir ~/.config/openbox
pi@raspberrypi:~ $ cp -i /etc/xdg/openbox/*.xml ~/.config/openbox/

もしも ~/.config/openbox のディレクトリが既にある場合は、足りないファイルだけをコピーしておきます。

これでHDMI接続のモニターとUSBモニターを繋げた状態でラズベリーパイを起動すると、USBモニターのXウインドウでもOpenBoxのウインドウ・マネージャが自動的に起動する様になります。

上のXウインドウ設定ファイル「99-fbturbo.conf」内で、ラズベリーパイのHDMI接続の画面を「primary」という名前でスクリーン番号0、USBモニターは「secondary」という名前でスクリーン番号1を割り当てましたが、二画面別スクリーン設定のXウインドウ上では「:0.0」、「:0.1」といった表記が使われます。 上の「desktopmgr.sh」のスクリプト内に2つ「DISPLAY=:0.1」で始まる行がありますが、これは次に続くコマンドをDISPLAY環境変数を「:0.1」として実行するというシンタックスで、結果的には次に続くコマンドによって開かれるXウインドウの出力は指定した画面(:0.1の場合はスクリーン番号1)に配置されます。

なので、この設定だと違う画面間でXウインドウの移動は出来ませんが、ターミナル・コマンドからであれば、「DISPLAY=:0.0」なり「DISPLAY=:0.1」をコマンドの前に付け加えれば、新しくウインドウを開く画面を指定する事ができます。 要は:

pi@raspberrypi:~ $ (export $DISPLAY=:0.1; コマンド)

なり、もしもコマンドが-「d」や「--display」オプションをサポートする場合は:

pi@raspberrypi:~ $ コマンド --display :0.1

と同等になります。

ステップ4-2でも同じ様な事を書きましたが、標準で有効になるメニューバーの「lxpanel」を使っていると、仕様としてScreen番号0の画面にしか表示されないそうです。 でも、OpenBoxの標準設定だと、デスクトップ上でマウスを右クリックをして表示されるメニューからアプリケーションが選択出来るので、他の画面でもメニューバー無しでもなんとか使えるはず。。

なのですが、リリースのラズビアン・バスターのインストール・イメージを去年末に試した段階では、OpenBoxで右クリックして表示されるメニューからはアプリケーションの選択ができなかったのですが、最近次の2コマンドでアップデートをしたら:

pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get dist-upgrade

右クリックでアプリケーションの選択が出来る様になりました (と言ってもRPi2B+だとリストが出るまでにちょと時間がかりましたが😇😇)。 今後のリリースでどのような設定に落ち着くかは検討が付きませんが、場合によってはOpenBoxの設定をいじってアプリケーションのリストが表示される様に変更しないといけない様になってしまうかもしれません。。

これで、二画面別スクリーンの設定は完了です。


[追記]

設定をした後にマウスをスクリーン2に移動さてもポインターが✖のままの場合はスクリプトに入力エラーがある可能性もあるの次のログファイルから情報を参考にデバッグしてみてください。

  • ~/.xsession-errors
  • ~/.cache/lxsession/LXDE-pi/run.log
  • ~/.cache/openbox/openbox.log

udlドライバー?

既に気づいている人もいるかもいませんが、Xウインドウの起動時一瞬だけUSBモニターの全画面が緑色になるので、実はこれまでの設定だと、udlドライバーではなく、udlfbドライバーが読み込まれてUSBモニターが動いています。

udlfbではなく、udlで起動させたい場合はステップ3で「sr-mod」モジュールを無効化したのと同じ方法で、次の1行を /etc/modprove.d/raspi-blacklist.conf に追加してudlfbモジュールを無効にする必要があります。

udlfb

リリースのラズビアンBusterに使われている標準Linuxカーネル(Ver.4.19.75)のudlドライバーで色々と試してみましたが、udlドライーバーだとXorgサーバーに画面としては認識されるみたいですが、手持ちのUSBモニターの画面は真っ黒で何も表示されませんでした。

Xウインドウのログ「/var/log/Xorg.0.log」を確認した処、udlfbドライバーでは見かけなかった、次の様なエラーが沢山記録されていて:

[    15.777] (EE) FBTURBO(1): FBIOPUTCMAP: Invalid argument
[    15.777] (EE) FBTURBO(1): FBIOPUTCMAP: Invalid argument
[    15.777] (EE) FBTURBO(1): FBIOPUTCMAP: Invalid argument

これが原因かと思ったら、fbturboのソースコード [https://github.com/ssvb/xf86-video-fbturbo] のREADMEによると:

1. The messages "(EE) FBTURBO(0): FBIOPUTCMAP: Invalid argument" in
   Xorg.0.log can be safely ignored. They are harmless.

という事で全く問題がないみたいです。

いろいろとネット検索をしてみましたが、良い手がかりがなく、将来的には何か解決策を見つけられるかもしれませんが、udlfbドライバーでは二画面設定が出来たので今後Linuxカーネルから削除されない限り大丈夫という事で落ち着きたいと思います。


終わりに

LCD-USB7XW/Bはバスパワーの製品なので電源はラズベリーパイのUSBポートから供給されます。
LCD-USB7XW/Bの取説によると、消費電力は最高で2.9WとあったのでUSB2.0規格で供給できる電流の500mAよりも少し多い580mAまでの電流を消費する様です。 それなりの電力消費になるので、ラズベリーパイ用の電源アダプターとUSB電源ケーブルは十分な電力を供給出来るものを用意した方が良いでしょう。


追記 :

最近、5V電源端子付きUSB3のハブを手に入れたのですが、LCD-USB7XW/Bを5V電源に繋げたUSB3ハブを経由してラズベリーパイに繋げた所、安定して起動することが出来ました。 5V電源端子付きUSB2ハブでも同じ様に使えると思いますが、あいにく手持ちが無いので確認していません。


おまけ

一番上の画像はHDMI(上段)とLCD-USB10XB-T(下段左)とLCD-USB7XW(下段右)で構成の色深度16bpp限定の三画面設定になります。



関連記事



コメント