タッチパネル一体型業務向けPC MSI-R104I8BD1を入手したのでWindows/Ubuntu/ChromeOSで起動してみた


sueboさんがうっかり落札してしまった14台のタッチパネル一体型PCを2台譲ってもらった。

現状は全台はけた、ということですが、この機種およびマザーボードについてぐぐっても情報がほとんど出てこないので、ここにメモとして残しておきます。

目次
 スペックについて
 中をあける方法
 USBメモリからの起動について
 Windows 10の起動状況
 Ubuntu 20.04の起動状況
 ChromeOSの起動状況
 BIOSアップデートについて

スペックについて

マザーボードはMSI MS-98I8 で、この一体型PCは下記の様なスペックになっている。

Celeron N3160
DDR3x1 / Mini-PCIex1 / mSATAx1 / SATAx1 / DPx1 / HDMIx1 / GbEx2
10インチ SVGA(800×600)+タッチパネル
Windows 10 IoT Enterprise 2016 LTSB ライセンスシール
メモリ/ディスクは搭載なしだが、CF/SATA変換ボードと2.5インチHDD接続用ケーブルが残存
電源は12V単一。一般的なコネクタではなく電線を直接入力するタイプ
ただ、マザーボード自体の仕様としては9V~36Vと書いてある

中をあける方法

抜けたりするのを防ぐため中のケーブルのコネクタ部分が固められています。

とりあえず中身を確認するためには、下記のような感じで開けてみてから、その次をどうしていくかを考えた方がいいと思います。

画像

このような感じであけるには以下の赤い丸印のネジを外します。

画像
画像
画像

中をあけたらメモリとディスクなどをいれて単体で動作できるようにしましょう。

USBメモリからの起動について

BIOSメニューからUSBメモリを選んでもなんか普通のマザーボードと同様にUSBメモリからの起動になりません。(後述のWindows, Ubuntu, ChromeOSで同じ)

起動順序を「UEFI: Built-IN EFI Shell」を一番最初にして起動します。

画像

EFI Shellが起動してくるので、何かキーを押してEFI Shellプロンプトで止めます。

画像

今回はUSBメモリが「fs1」で認識されていたので「fs1:」でドライブを移動したあと、

「efi\boot\bootx64.efi」を実行するとUSBメモリからの起動が開始されます。

下記の写真では「cd efi」「cd boot」でディレクトリ移動してから「bootx64.efi」を実行しています。

画像

なお、このEFI Shellはタブキー補完が効くのでefiを指定する際に「e」を入力したあとにタブキーを押すと「efi」と変換されます。

また、fs1:で移動した後にそこにどんなディレクトリ/ファイルがあるかを確認するには「ls」を実行することで確認出来ます。

なお、USBメモリに startup.nsh というファイルを置いて、「.\efi\boot\bootx64.efi」とかかいておけば自動起動されるんじゃないかなぁとは思います。

参考:拡張ファームウェアインターフェイス (EFI) インテル®の基本手順サーバーボード

Windows 10の起動状況

Windows 10 IOT ENT 2016 LTSBのプロダクトキーがついていますが、このプロダクトキーが通るのは、「Windows 10 IOT ENT 2016 LTSBメディア」か「Windows 10 ENT 2016 LTSB」だけのようです。「Windows 10 Enterpriseメディア」や「Windows 10 Enterprise 2019 LTSCメディア」では通りませんでした。

「Windows 10 IOT ENT 2016 LTSBメディア」を含めて2016年頃のWindows 10メディアだとデバイスが2個△マークとなりますが、タッチパネル/イーサネット含めて動作しています。

2017年以降のWindows 10 メディアを使ったり、Windows Updateを実行すると、全デバイスが正常に認識されますので、問題はありません。

画像

なお、Windows 10 IOT ENT 2016 LTSBのプロダクトキーを入力してライセンス認証を行った場合、「Windows 10 Enterprise 2016 LTSB」として認識されています。

画像

なお、Windows 10 Enterprise 2016 LTSBのライフサイクル ポリシーはメインストリームが2021/10/12、延長が2026/10/13となっています。

画像

Ubuntu 20.04の起動状況

普通にインストールすると、タッチパネル用のドライバが認識されているもののX-Window上でタッチパネル動作を認識できていません。

画像
画像

この問題についてはxserver-xorg-input-evdevをインストールして、xserver-xorg-input-libinputを削除して対応できました。(xinput-calibratorはタッチパネルの位置調整用コマンドxinput_calibratorをインストールするために追加している)

$ sudo apt install xserver-xorg-input-evdev xinput-calibrator
$ sudo apt remove xserver-xorg-input-libinput

これを行った後、再起動するとタッチパネルが動作するようになっていると思います。

画像

Ubuntuのオンスクリーンキーボードは、「設定」の「アクセスビリティ」から設定できますが、最初のログイン画面では動いていないようです。

とりあえず、自動ログインさせてログイン画面をスキップする設定をGUIで行おうとしたところ画面が表示できていない・・・

画像

このため設定ファイル /etc/gdm3/custom.conf を直接編集し、下記の設定を行いました。

[daemon]
AutomaticLoginEnable=yes
AutomaticLogin =ユーザ名

ChromeOSの起動状況

純正ChromeOSのリカバリイメージを元に汎用ChromeOS起動ディスクを作成するbrunchを使ってUSBメモリを作成して起動したもの。

rammus用リカバリイメージを元に作成してあるUSBメモリがあったので起動してみたところ、標準状態でそのままタッチパネルもLineOUTからのオーディオ出力も普通に使える状態で起動してきました。

画像

ただ、Chrome OSは、800×600解像度で使うものではない感じですね・・・


BIOSアップデートについて

マザーボードの製品ページを開いて少しスクロールすると上側に「Download」リンクが現れ、そこにBIOSアップデートが提供されており、Version 170と書いてある。

ZIPファイルをダウンロードするとバージョンアップ履歴のテキストファイルがあり、Version 170とは、E98I8IMS V1.7ということのようだ

画像

届いたものを確認すると E98I8IMS V1.6となっているので、少し古いバージョンということになっている。

画像

BIOSアップデータはEFIで実行する形式なので、EFI Shellから実行する必要があります。

EFI ShellではFAT32領域しか見れず、NTFSやLinux ext4領域などは使えない、という制約があるので、FAT32でフォーマットしたUSBメモリにBIOSアップデート関連ファイルを展開して使用します。

USBメモリをさして、EFI Shellに入ってから下記のように入力してアップデートを実施します

Shell> fs1:
fs1:\> cd E98I8IMS170
fs1:\> EFUx64.EFI E98I8IMS.170
画像
画像

アップデートが終わったら再起動します。

バージョンを確認するとV1.7に変わったことが確認できます。

画像

Linux上からIPv6アドレス指定でsshするときにはインタフェース名をつける


Linux上からIPv6アドレスを指定してsshしようとしたら「port 22: Invalid argument」と言われてしまった。

[root@centos8 ~]# ssh root@fe80::250:56ff:fe8f:aba9
ssh: connect to host fe80::250:56ff:fe8f:aba9 port 22: Invalid argument
[root@centos8 ~]#

きちんとpingでは応答あるのに

[root@centos8 ~]# ping -6 fe80::250:56ff:fe8f:aba9 -c 5
PING fe80::250:56ff:fe8f:aba9(fe80::250:56ff:fe8f:aba9) 56 data bytes
64 bytes from fe80::250:56ff:fe8f:aba9%ens192: icmp_seq=1 ttl=255 time=0.246 ms
64 bytes from fe80::250:56ff:fe8f:aba9%ens192: icmp_seq=2 ttl=255 time=0.269 ms
64 bytes from fe80::250:56ff:fe8f:aba9%ens192: icmp_seq=3 ttl=255 time=0.250 ms
64 bytes from fe80::250:56ff:fe8f:aba9%ens192: icmp_seq=4 ttl=255 time=0.303 ms
64 bytes from fe80::250:56ff:fe8f:aba9%ens192: icmp_seq=5 ttl=255 time=0.316 ms

--- fe80::250:56ff:fe8f:aba9 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 135ms
rtt min/avg/max/mdev = 0.246/0.276/0.316/0.035 ms
[root@centos8 ~]#

なんでかと思ったら、sshコマンドでは、sshコマンドを実行したホストのどのインタフェースを使ってアクセスするのかを明示的に指定する必要があったようだ。

[root@centos8 ~]# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:9c:2a:d1 brd ff:ff:ff:ff:ff:ff
    inet 172.17.44.49/16 brd 172.17.255.255 scope global noprefixroute ens192
       valid_lft forever preferred_lft forever
    inet6 xxxx:xxx:xxxx:4700:2788:3aad:4bfa:6715/64 scope global dynamic noprefixroute
       valid_lft 2172237sec preferred_lft 185037sec
    inet6 fe80::2c85:a948:cd5:d5e1/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
[root@centos8 ~]#

つかうネットワークインタフェースは「ens192」なので、IPv6アドレスの後ろに「%ens192」をつけて実行

[root@centos8 ~]# ssh  root@fe80::250:56ff:fe8f:aba9%ens192
Password:
Last login: Wed Apr  7 16:24:37 2021 from fe80::2c85:a948
Oracle Corporation      SunOS 5.11      11.3    September 2015
root@solaris11:~# exit
logout
Connection to fe80::250:56ff:fe8f:aba9%ens192 closed.
[root@centos8 ~]#

問題無く接続できました。

Solaris11でホスト名/IPアドレスを変更する


Solaris10だったら以下のファイルあたりの変更でやってた

/etc/nodename
/etc/hostname.ネットワークインタフェース名
/etc/hosts
/etc/resolv.conf
/etc/nsswitch.conf

Solaris11だとファイルを編集するのではなく、コマンドで変更する形になる

資料:Oracle® Solaris 10 から Oracle Solaris 11.3 への移行「Oracle Solaris 11 でのネットワークの構成

現在のホスト名確認

# hostname

ホスト名変更

# svccfg -s svc:/system/identity:node setprop config/nodename=ホスト名
# svcadm refresh svc:/system/identity:node
# svcadm restart svc:/system/identity:node
# vi /etc/hosts で関係するホスト名を修正
# reboot

refreshのところは「svcadm refresh node」でも大丈夫説がある模様

ネットワーク設定確認

ネタ元 IPv4 インタフェースの構成

# ipadm show-addr
# ipadm show-if
# route -p show
# netstat -rn
# dladm show-phys
# dladm show-link

ネットワーク設定変更

現在値を消して、新規作成となるが2種類手順がある

アドレス設定のみ削除するもの

# ipadm delete-addr net?/v4
# ipadm create-addr -T static -a local=<IPアドレス>/<プレフィックス> net?/v4

ネットワーク定義全体を削除するもの

# ipadm delete-ip net?
# ipadm create-ip net?
# ipadm create-addr -T static -a local=<IPアドレス>/<プレフィックス> net?/v4

デフォルトゲートウェイ設定

# route -p add default <IPアドレス>

DNS設定確認

#  svccfg -s network/dns/client
svc:network/dns/client> listprop config
<略>
svc:network/dns/client> quit
#

DNS設定変更

(ネタ元 DNS クライアントを有効にする方法 )

#  svccfg -s network/dns/client
svc:/network/dns/client> setprop config/search = astring: ("<ドメイン名>" "<ドメイン名>")
svc:/network/dns/client> setprop config/nameserver = net_address: (<IPアドレス> <IPアドレス>)
svc:/network/dns/client> setprop config/options = timeout:1 
svc:/network/dns/client> select network/dns/client:default
svc:/network/dns/client:default> refresh 
svc:/network/dns/client> quit
#
# svcadm enable network/dns/client 

nsswitchの設定を確認する場合

# cat /etc/nsswitch.conf
# svccfg -s system/name-service/switch 
svc:/system/name-service/switch> listprop config
<略>
svc:/system/name-service/switch> quit
#

nsswitchを変更する場合の例

# svccfg -s system/name-service/switch 
svc:/system/name-service/switch> setprop config/host = astring: "dns files [TRYAGAIN=0]" 
svc:/system/name-service/switch> select system/name-service/switch:default 
svc:/system/name-service/switch:default> refresh 
svc:/system/name-service/switch:default> quit
# svcadm enable system/name-service/switch 
# svcadm refresh name-service/switch

Oracle公式に書いてあるDNSサーバ設定手順例

# svccfg -s dns/client setprop config/nameserver=net_address: 192.168.1.1
# svccfg -s dns/client setprop config/domain = astring: "foohost.org"
# svccfg -s name-service/switch setprop config/host = astring: "files dns"
# svcadm refresh name-service/switch
# svcadm refresh dns/client

rootユーザのログイン拒否問題

telnet は /etc/default/login の「CONSOLE=/dev/console」をコメントにする

sshは/etc/ssh/sshd_configに「PermitRootLogin yes」を設定して「svcadm restart ssh」

1つのNICに複数のIPアドレスをつける

eth0:1 というような感じで1つのNICに複数のIPアドレスをつけるやり方

# ipadm create-addr -T static -a local=xxx.xxx.xxx.xxx/24 net0/newif
#

ifconfig -aで見ると、net0:1 というデバイスが作られています。

削除する場合は以下

# ipadm delete-addr net0/newif
#

Ubuntu 18.04以降/CentOS7向けにMicrosoftがOpenJDK 11のパッケージ配布を始めた


Microsoftは従来からLinuxのいくつかのディストリビューション向けにバイナリパッケージを配布するレポジトリサーバ https://packages.microsoft.com/ を公開している。

たとえば、PowerShellを使いたい場合は「Linux への PowerShell のインストール」の手順を行って設定していた。

このたび、MicrosoftからOpenJDK 11のプレビュー版提供が開始された。「Announcing Preview of Microsoft Build of OpenJDK

Microsoft Build of OpenJDK」を見ると「Linux Installers for OpenJDK 11」という手順が公開されており、これを見ると、Debian 9と10、Ubuntu 18.04以降、CentOS8で従来から提供されているMicrosoftプロダクトレポジトリにおいて、msopenjdk-11の提供が始まったように見える。

うちのCentOS7環境はPowerShellを使える様にしているので使えるはず!と「yum search msopenjdk」を実行してみると見付からない・・・

設定されているレポジトリファイルはPowerShell手順にあるようにRHEL7のものだしなぁ・・・

# curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo

・・・OpenJDKの方のCentOS7手順を見てみる。

# sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

取得しているディレクトリが https://packages.microsoft.com/config/rhel/7/ ではなく https://packages.microsoft.com/config/centos/7/ に変更されている。

というわけで、レポジトリファイルを変更して再実行!

無事検索されるようになりました。

が・・・よく見ると、CentOS7レポジトリでは「powershell」はなく「powershell-preview」というパッケージのみ提供な模様。(rhel7ではpowershell,powershell-lts,powershell-previewが提供されている)

CetnOS7ユーザは注意が必要なようです。

とはいえRHEL7/CentOS7ユーザはRedHat提供のOpenJDK 11が使えますけどね・・・(java-11-openjdk)。「OpenJDK RPMs for RHEL 7」「第2章 RED HAT ENTERPRISE LINUX での OPENJDK 11 のインストール

RHEL8/CentOS8についても同様で、OpenJDK 11をjava-11-openjdkというパッケージ名で提供しており、また、java-latest-openjdkでOpenJDK 16も提供しているので除外されているようですね。