投げ銭

★当サイトへの投げ銭(PayPal)★

LINK


(無償、寄付歓迎) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

★当サイトへの投げ銭(PayPal)★

2021年3月28日日曜日

【Linux Centos 7】MATEデスクトップ日本語環境にLibreOffice(日本語化)をインストールする【LibreOffice 7.0.5.2】

MATEデスクトップ環境は、次の方法でDockerコンテナに構築している。




■LibreOfficeの最新版をインストールする。

◯必要なパッケージをダウンロードした。

・本体パッケージを含む圧縮ファイル

wget https://download.documentfoundation.org/libreoffice/stable/7.0.5/rpm/x86_64/LibreOffice_7.0.5_Linux_x86-64_rpm.tar.gz


・日本語化のための言語パッケージを含む圧縮ファイル

# wget https://download.documentfoundation.org/libreoffice/stable/7.0.5/rpm/x86_64/LibreOffice_7.0.5_Linux_x86-64_rpm_langpack_ja.tar.gz


◯パッケージの展開とインストール

・本体パッケージ

# tar zxvf LibreOffice_7.0.5_Linux_x86-64_rpm.tar.gz
# cd LibreOffice_7.0.5.2_Linux_x86-64_rpm/RPMS
# yum install *.rpm
Total size: 619 M
Installed size: 619 M
# cd ../..

・日本語化のための言語パッケージ

# tar zxvf LibreOffice_7.0.5_Linux_x86-64_rpm_langpack_ja.tar.gz
# cd LibreOffice_7.0.5.2_Linux_x86-64_rpm_langpack_ja/RPMS
yum install *.rpm
Total size: 2.9 M
Installed size: 2.9 M
# cd ../..


◯動作確認

MATEデスクトップを開き、LibreOfficeを起動した。


次の写真のように、きちんと日本語表示になっている。



以上


<参考>
・Installing LibreOffice on Linux
< https://wiki.documentfoundation.org/Documentation/Install/Linux#Fedora_.2F_CentOS > 2021年3月27日

【Linux CentOS 7】MATEデスクトップの基本機能をロックダウンする【MATE 1.16.2】


MATEデスクトップ環境をリモートデスクトップとして使う場合、
スクリーンロックなどいくつかの機能が動作しないようにしておいた方が良いことがある。

MATEデスクトップ環境は次の手順でDockerコンテナにインストールしたものを使用している。

以下では、いくつかの機能をロックダウンするための手順について記載する。
機能のロックダウンには次のコマンドによって起動するGUIのエディタを利用した。



■MATEデスクトップの設定用エディタの起動方法

MATEデスクトップターミナルから次のコマンドを実行した。
すると、下の写真のようにエディタが起動した。

[user01@580dd7fd3e61 /]$ dconf-editor



■エディタの使い方

フォルダアイコンが5つ並んでいる。MATEを設定するためのキーが分類されている。

基本的には、フォルダを辿っていって設定すべきキーの値をマウスクリックでON/OFFすることによって設定値が即座に変更される。


■設定値の見つけ方

右上の虫眼鏡アイコンから設定項目の検索ができる。
試しに、screenと入力して検索してみた。


このように編集の必要なキーの見当をつけることができる。
実際に、スイッチを切り替えてみて、挙動を確認しながら見つけていく。



■以下では、MATEデスクトップ機能のいくつかのロックダウンを行ってみた。


◯デスクトップ上部にあるシステムメニューから「画面のロック」「ログアウト」項目を非表示にした。

デフォルトのシステムメニューは次のように表示されていた。


それぞれ、次のキーの値を変更することで即座にメニューに反映された。

・「画面のロック」項目の非表示

/org/mate/desktop/lockdown/disable-lock-screen
 false ⇒ true


・「ログアウト」項目を非表示

/org/mate/desktop/lockdown/disable-log-out
 false ⇒ true


それぞれの設定の結果、次のようになった。




◯画面の自動ロックを禁止する

MATEデスクトップにアクセスせずに放置していると、デフォルトではタイムアウトとなり自動的に画面にロックがかかった。

次のキーをfalseに設定することによって自動画面ロックをオフにできた。

/org/mate/screensaver/lock-enabled
 true ⇒ false


パネルの編集を無効化

設定変更前には、パネル(上部のバー部分)の右クリックで、
次の写真のように、パネル操作の項目がメニューに表示される。


次のように設定値を変更した。

/org/mate/panel/general/locked-down
 false ⇒ true

すると、次の写真のようにパネル変更の項目がメニューから削除された。



◯システムメニューの非表示

デフォルトでは、システムメニューがある。


次の設定値をfalseに設定した。

/org/mate/panel/menubar/show-desktop
 true ⇒ false

システムメニューが表示されなくなった。



他にも、アプリケーション、場所メニューを非表示する設定値があった。


◯上部パネルを隠すボタンを表示する

/org/mate/panel/toplevels/top/enable-buttons
 false ⇒ true

次のように非表示ボタンが上部パネルの左右に現れた。


表示された非表示ボタンを押すと上部パネルが消えた。




iBUSアイコンを隠す

設定変更前には、次の写真のように「あ」という表示がある。
これを右クリックすることによって、入力メソッドについて設定が変更できる状態になっている。


設定値を次のように変更した。

/desktop/ibus/panel/show-icon-on-systray
 true ⇒ false



◯プリンターを使わせない設定キーもあった。

/org/mate/desktop/lockdown/disable-printing
 false


◯プロキシを設定するキーのあるフォルダもあった。
/system/proxy/



<おまけ>

・メインメニュー項目などの編集は、MATEの場合、alacarteコマンドではなく、mozoコマンドを使う。

・alt+F2でコマンド入力ウインドウが開くので、必要なGUIを起動可能。

・ターミナル:mate-terminal

・自動起動設定(スタートアッププログラム設定):mate-session-properties

2021年3月20日土曜日

【Linux Raspbian】mdadmソフトウェアミラーリングアレイの「削除」について【mdadm アレイ削除】


Linux(Raspbian)のソフトウェアRAIDで、ミラーリング(RAID1)アレイを構成し動作させている。
このアレイはデータ領域として特定のディレクトリに自動マウントされている。

このアレイに対するテストや、削除の手順を記載している。

アレイの削除手順をすぐに試す場合は、「■アレイの削除手順の模索」の番号1〜3の手順に記載するコマンドを実行すればよい。

この記事に登場するコマンドを実行すると意図せずデータを喪失する危険性があります。
十分に動作検証した上で試すようにしてください。



■削除するアレイの状態を確認した

正常にRAIDアレイが動作している状態だとわかった。

root@raspberrypi:/home/pi# cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sda1[0] sdb1[1]
      975453184 blocks super 1.2 [2/2] [UU]
      bitmap: 0/8 pages [0KB], 65536KB chunk

unused devices: <none>


詳細を表示した。

root@raspberrypi:/home/pi# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Mar 14 13:03:08 2021
        Raid Level : raid1
        Array Size : 975453184 (930.26 GiB 998.86 GB)
     Used Dev Size : 975453184 (930.26 GiB 998.86 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Sun Mar 14 21:39:20 2021
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : raspberrypi:0  (local to host raspberrypi)
              UUID : a943d355:2f4635c6:78eeb869:ad4d732d
            Events : 2335

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1


マウントがされていることを確認した。

root@raspberrypi:/home/pi# mount | grep md0
/dev/md0 on /mnt/storage type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)



■削除前にアレイに対して色々テストを行った(その1)

(テスト1)

アレイが動作している状態では、アンマウントはできなかった。

root@raspberrypi:/home/pi# umount /dev/md0
umount: /mnt/storage: target is busy.

(テスト2)
アレイが動作している状態では、アレイを停止させられなかった。

root@raspberrypi:/home/pi# mdadm --stop /dev/md0
mdadm: Cannot get exclusive access to /dev/md0:Perhaps a running process, mounted filesystem or active volume group?

(テスト3)
アレイが動作している状態では、アレイを構成しているディスクをお役御免にすることもできなかった。

root@raspberrypi:/home/pi# mdadm --misc --zero-superblock /dev/sda1 /dev/sdb1
mdadm: Couldn't open /dev/sda1 for write - not zeroing
mdadm: Couldn't open /dev/sdb1 for write - not zeroing



■削除前にアレイに対して色々テストを行った(その2)

1、強制的に構成のディスクをフェイルにセットしてみた。
これにより片側のディスクだけフェイルにセットされた。

root@raspberrypi:/home/pi# mdadm --fail /dev/md0 /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0

2、しかし残りのディスクについてはフェイルにセットできなかった。

root@raspberrypi:/home/pi# mdadm --fail /dev/md0 /dev/sdb1
mdadm: set device faulty failed for /dev/sdb1:  Device or resource busy 

root@raspberrypi:/home/pi# mdadm --manage --set-faulty /dev/md0 /dev/sdb1
mdadm: set device faulty failed for /dev/sdb1:  Device or resource busy

3、この段階で詳細情報を表示させた。

root@raspberrypi:/home/pi# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Mar 14 13:03:08 2021
        Raid Level : raid1
        Array Size : 975453184 (930.26 GiB 998.86 GB)
     Used Dev Size : 975453184 (930.26 GiB 998.86 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Mon Mar 15 02:36:45 2021
             State : clean, degraded 
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 1
     Spare Devices : 0

Consistency Policy : bitmap

              Name : raspberrypi:0  (local to host raspberrypi)
              UUID : a943d355:2f4635c6:78eeb869:ad4d732d
            Events : 2337

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       17        1      active sync   /dev/sdb1

       0       8        1        -      faulty   /dev/sda1


■アレイの削除手順の模索

途中にテストを挟んでいるので、アレイの削除をいきなりしたい場合は、
番号1〜3の手順のコマンドを実行するとよい。

1、自動マウントしないように設定して再起動した。

次のように、アレイを自動マウントする設定をコメントアウトした。

root@raspberrypi:/home/pi# nano /etc/fstab
#UUID="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"   /mnt/storage      xfs    defaults,auto,rw,nofail   0       2
root@raspberrypi:/home/pi# reboot


再起動後、アレイの状態を表示させた。
(上記のテストで、ディスクの片側をフェイルにしたので片側動作状態である。)

root@raspberrypi:/home/pi# cat /proc/mdstat
Personalities : [raid1] 
md0 : active (auto-read-only) raid1 sdb1[1]
      975453184 blocks super 1.2 [2/1] [_U]
      bitmap: 2/8 pages [8KB], 65536KB chunk

unused devices: <none>

詳細情報の表示
(上記のテストで、ディスクの片側をフェイルにしたので片側動作状態である。)

root@raspberrypi:/home/pi# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Mar 14 13:03:08 2021
        Raid Level : raid1
        Array Size : 975453184 (930.26 GiB 998.86 GB)
     Used Dev Size : 975453184 (930.26 GiB 998.86 GB)
      Raid Devices : 2
     Total Devices : 1
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Mon Mar 15 02:42:35 2021
             State : clean, degraded 
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : raspberrypi:0  (local to host raspberrypi)
              UUID : a943d355:2f4635c6:78eeb869:ad4d732d
            Events : 2339

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       17        1      active sync   /dev/sdb1

(テスト)

アレイを停止させた。

root@raspberrypi:/home/pi# mdadm --stop /dev/md0
mdadm: stopped /dev/md0

アレイの状態を表示させるが、アレイは表示されなくなった。

root@raspberrypi:/home/pi# cat /proc/mdstat
Personalities : [raid1] 
unused devices: <none>
root@raspberrypi:/home/pi# mdadm --detail /dev/md0
mdadm: cannot open /dev/md0: No such file or directory

アレイのmd0デバイスが認識されない状態なので、
アレイを構成していたディスクをフェイルにセットすることもできなかった。

root@raspberrypi:/home/pi# mdadm --manage --set-faulty /dev/md0 /dev/sdb1
mdadm: error opening /dev/md0: No such file or directory

同様に、アレイから構成ディスクを解除する操作も無効となった。
root@raspberrypi:/home/pi# mdadm --manage /dev/md0 -r /dev/sdb1
mdadm: error opening /dev/md0: No such file or directory

ここで、再起動をかけてみた。

root@raspberrypi:/home/pi# reboot


再起動後、自動的にアレイが動作開始した。
これはアレイを構成するディスクに構成情報が記録されているためだろう。

root@raspberrypi:/home/pi# cat /proc/mdstat
Personalities : [raid1] 
md0 : active (auto-read-only) raid1 sdb1[1]
      975453184 blocks super 1.2 [2/1] [_U]
      bitmap: 2/8 pages [8KB], 65536KB chunk

unused devices: <none>
root@raspberrypi:/home/pi# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Mar 14 13:03:08 2021
        Raid Level : raid1
        Array Size : 975453184 (930.26 GiB 998.86 GB)
     Used Dev Size : 975453184 (930.26 GiB 998.86 GB)
      Raid Devices : 2
     Total Devices : 1
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Mon Mar 15 02:42:35 2021
             State : clean, degraded 
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : raspberrypi:0  (local to host raspberrypi)
              UUID : a943d355:2f4635c6:78eeb869:ad4d732d
            Events : 2339

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       17        1      active sync   /dev/sdb1

そこで、最初のアレイを停止させる手順からやりなおした。


2、アレイをストップさせた。

アレイはmdXという名前とする。

root@raspberrypi:/home/pi# mdadm --stop /dev/mdX
mdadm: stopped /dev/md0

3、アレイを構成するディスクの情報を消去した。

アレイを構成しているディスクのパーティションは、sdA1と、SdB1とする。

(注意)次のコマンドで、アレイの情報が消去され、データを喪失する。
ただし、ディスク上にはデータが記録されたままだと考えられるので、完全消去にはディスク全体の0書き込みなどの処理が必要になる。

root@raspberrypi:/home/pi# mdadm --misc --zero-superblock /dev/sdA1 /dev/sdB1


そして、再起動した。
root@raspberrypi:/home/pi# reboot

今度は再起動後も、アレイは復活しなかった。

root@raspberrypi:/home/pi# cat /proc/mdstat
cat: /proc/mdstat: No such file or directory

root@raspberrypi:/home/pi# mdadm --detail /dev/mdX
mdadm: cannot open /dev/md0: No such file or directory

以上のことから、アレイが削除できたと判断した。


2021年3月14日日曜日

【Raspbian】Sambaサーバーのリモートフォルダをマウントするためのコマンド


◯システム情報の表示

Raspberry pi 4(Raspbian)

root@raspberrypi:/home/pi# uname -a
Linux raspberrypi 5.4.51-v8+ #1333 SMP PREEMPT Mon Aug 10 16:58:35 BST 2020 aarch64 GNU/Linux

◯マウントに失敗したコマンド

Sambaサーバーのリモートフォルダをマウントしようとしたら、次のエラーが発生した。

root@raspberrypi:/home/pi# mount -t cifs -o user=admin,pass=mypassword //fileserver.exaple.com/mine /mnt/cifs/fileserver/
mount error(2): No such file or directory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

◯マウントに成功したコマンド

次のように修正したところうまくリモートフォルダをマウントできた。

root@raspberrypi:/home/pi# mount -t cifs -o user=admin,pass=mypassword,vers=1.0 //fileserver.exaple.com/mine /mnt/cifs/fileserver/


もしくは、次のようにしてもうまくマウントできた。

root@raspberrypi:/home/pi# mount -t cifs -o user=admin,pass=mypassword,vers=2.0 //fileserver.exaple.com/mine /mnt/cifs/fileserver/



<参考>
・mount.cifs fails with mount error(2): No such file or directory
< https://askubuntu.com/questions/1162199/mount-cifs-fails-with-mount-error2-no-such-file-or-directory > 2021年3月14日

2021年3月13日土曜日

【IBus Kana Kanji】【IBus Mozc】VNCリモート接続したMATEデスクトップ環境で日本語入力できるように設定する【Linux CentOS 7】



<利用環境について>

 CentOS7 に、MATEデスクトップ環境を導入した直後の状態です。Dockerコンテナに構築しリモート接続しています。
簡単に説明すると次の手順によって構築しました。

 CentOS7基本イメージからDockerコンテナを動作させ、ロケールを全て有効にし、yum updateをかけました。 (updated on 12 Mar, 2021) 
その上で、X WindowシステムやMATEをyumで追加インストールし、日本語環境になるように設定を行いました。
日本語入力のために、ibus-mozcをyumで導入しました。(オプション)

詳細は、次のページを参照してください。

 そうして、VNC SERVERを利用してネットワーク越しにリモート接続しました。
その結果が、一枚目の写真です。


<設定の目的>

 デフォルトでは、日本語入力システムの「Kana Kanji」「MOZC」は「半角/全角」キーを直接入力モードと日本語入力モードとの切り替えで使っています。
しかしVNC SERVERでMATEなどのデスクトップ環境にリモート接続した場合、「半角/全角」キーがうまく使うことができないようです。
そのために、うまく日本語入力ができないという問題が生じるようです。

 そこで以下では、「Kana Kanji」と、「MOZC」 について、VNC SERVERでリモート接続した場合にも日本語入力ができるように設定していきます。



■日本語入力メソッドの追加

 下の写真のように、右上の時刻表示の隣に「EN」という表示が見えている。
「EN」という表示を右クリックし、メニューから「設定」を選択した。


 すると、下図のように「IBusの設定」というウインドウが開くので、その「入力メソッド」タブを開いた。入力メソッド一覧が空の場合、入力メソッドを追加した。

 「追加」ボタンを押すと表示される「入力メソッドの選択」ウインドウの一覧から”日本語”をクリックした。

 すると下図のように、インストールされている日本語入力メソッドが一覧できる。
入力メソッドとして利用したいものを選択して「追加」ボタンを押した。

(以下では、《かな漢字》、《Mozc》それぞれについて設定方法を記載した。)




■「Kana Kanji」日本語入力システムの場合

1、「Kana Kanji」日本語入力システムの設定画面を開く。

 下の写真のように、右上にある時刻表示隣の「EN」という表示を右クリックしメニューを出し、「設定」を選択した。

 すると、「IBusの設定」というウインドウが開くので、その「入力メソッド」タブを開いた。

つづいて入力メソッド一覧から、「あ」(日本語 - かな漢字)を選択後、欄の右下にある「設定」ボタンをクリックした。


 これにより、次の写真のように「IBus かな漢字の設定」というウインドウが開いた。


2、直接モードへの切り替えのためのショートカットキーの再登録を行う。

 下の写真のように、この「IBus かな漢字の設定」というウインドウの、「ショートカット」タブを開いた。

 まず、左側の欄から「ひらがな」を選択した。(★)

 右側の欄には、”指定モード”とその”ショートカット”の組が表示されている。
写真のように、「直接入力モードに変更  Zenkaku Hankaku」の組を探し、1回だけクリックし選択した。


この状態で、もう一度クリックすると、次の表示(新しいアクセラレータ)に変わった。


さらにこの状態で、左側「CTRL」キーを押しながら、「スペース」キーを押した。
すると、下の写真のように「Ctrl + Space」の表示になった。


以上により、次の設定が完了したことになる。

設定が完了した内容
「ひらがな」入力モード状態で「Ctrl + Space」キーの組を押下すると、「直接入力モードに変更」される。


同様にして、「カタカナ」、「半角カタカナ」、「英数」、「全角英数」についてもモード切り替えのためのショートカットキーを再設定していった。
上の手順の(★)のところから同様に設定を行う。


3、直接入力状態から「ひらがな入力モード」に変更するショートカットキーを再登録する。

手順2と同様に「Zenkaku Hankaku」になっている組を見つけて、ショートカットキーを「Ctrl + Space」に変更した。


開いている設定ウインドウを閉じた。


4、入力メソッドを「Kana Kanji」日本語入力システムに切り替える。

 下の写真のように右上の時刻表示の隣の「EN」をクリックした。
入力メソッド一覧が表示されるので、「日本語 - Kana Kanji」をクリックして選択した。



すると、下の写真のように、「あ」という表示になった。



以上で、「Kana Kanji」日本語入力システムを利用するための設定は完了した。


5、動作テスト(「Kana Kanji」日本語入力システム)

以上の手順で、VNC SERVER によるリモート接続のMATEデスクトップ環境で、「Kana Kanji」日本語入力システムを利用できるようになった。

下の写真のように、適当なアプリケーションを開いて、入力テストを行った。
それぞれ、直接入力モードと、日本語入力モードの切り替えを「Ctrl + Space」キーの組み合わせ(上記で設定済み)で行い、入力をテストした。


以上のように、ターミナル、テキストエディタ、Firefox、メモなどのアプリケーションで、正常に日本語入力、直接入力(英数字入力)ができるようになった。



■「Mozc」日本語入力システムの場合

「Mozc」でも、設定の目的はモードの切り替えキーについて、
「全角/半角」キーを「Ctrl + Space」キーの組に変更することである。

次の手順で行った。


下記、画面において、
「キー設定の選択」で、ベースにしたいキーマップを選んだ。(MS-IMEを選択した。)

そして、「編集」ボタンを押した。


次の写真のように、Mozcキー設定ウインドウが開いた。

「Hankaku / Zenkaku」を探して、一回クリックした。


もう一度クリックすると、ボタンが現れた。

そのボタンをクリックすると、
「Mozc キーバインディング 設定」というウインドウが開いた。

この状態で、新しいキーの組を入力した。
「Ctrl」を押しながら「スペース」キーを押した。



すると、次の表記となった。
「OK」で閉じた。


同様にして、残る全ての「Hankaku / Zenkaku」を探して、
次の通り、「Ctrl Space」の組に変更した。





設定が完了したら「OK」で設定ウインドウを閉じる。

以上でMOZCについてのキーの変更が完了した。



入力メソッドを「Mozc」に切り替えた。


動作テストを行った。


以上

2021年3月10日水曜日

【Linux CentOS7】DockerコンテナにMATEによるLinuxデスクトップ環境を構築する(日本語、複数ユーザー対応)【VNC SERVERによるヘッドレス運用】【No privileged】

最終更新 2022年10月11日

<概要>

◯特権なしでMATEデスクトップを運用

以前に、DockerコンテナでMATEデスクトップ環境を構築したことがあった。
VNC SERVERを用いてネットワーク越しに接続できるヘッドレスシステムである。
しかしそのときはコンテナを特権動作させる必要があった。

しかし、この記事で示すように「特権なし(privileged なし)」でそのような環境を構築している
この方法では特権が不要なので、システムの信頼性も高まると考えられる。


◯日本語表示のMATEデスクトップ環境

Dockerコンテナで使用するCentOS7イメージは、CentOS7 minimal isoで導入できるシステムとは異なっていて、日本ロケールのみ追加してもうまく日本語表示ができなかった。
(一部のみ日本語化され、右クリックメニューが英語になるという問題が生じていた。)

これはおそらくロケールに関するデータが不十分なために生じていたのだと思う。
後述するようなとても簡単な設定でCentOS7 minimal isoのようにロケールをフルで利用可能になった。
その上で、必要なデスクトップ環境構築のためにパッケージと、日本語表示のための設定を加えた。

これにより、はじめてMATEデスクトップが完全に日本語表示となった


◯Dockerコンテナでデスクトップ環境を運用することのメリット

Dockerコンテナを用いてデスクトップ環境を構築すれば、
構築直後のデスクトップをイメージ化しておけば、いつでもイメージから復元し元の状態に戻すことが可能になる。
万が一、不具合が生じたとしても迅速に簡単に復旧が可能になる。

また、イメージを用いれば同じデスクトップ環境を複製することも可能になる。
これに対応する方法はいくつか考えられる。ただしこの記事では扱っていない。

「Dockerの仮想ネットワークで対応する」
これによりコンテナ毎にIPアドレスを割り当てられるようになり、同一イメージからコンテナを起動してもリモートアクセストランスポートが各コンテナで重ならなくなる。

「コンテナの起動前にVNC SERVER起動スクリプトを与える」
あるいは、VNC SERVERを起動するコマンドが記載されたスクリプト(この記事に登場する)を、コンテナの起動前に外部からコピーして与えておくようにする。
このスクリプトには、VNC SERVERのコマンドとリモートアクセスのトランスポート番号に対応するディスプレイの番号が記載されている。
コンテナごとに異なる内容のスクリプトをコピーして与えれば、同じイメージから起動するコンテナでも、VNC SERVERが使うトランスポート番号を重ねずに済むようにできる。

イメージから簡単にデスクトップ環境を開始し、また復元できるという特徴からDockerによるデスクトップ環境の構築は、シンクライアントの構築にうってつけなのではないかと思う。



■Dockerホストのセットアップ

(注意)
「このデスクトップコンテナを動作させるDockerホストの要件について」

必ず、このDockerホストは安全なLAN内で動作させるようにすること。
さもなければ外部から不正アクセスを許してしまうことになる。
(独自のDocker仮想ネットワークを構築するなど適切なポリシーで工夫を行うならこの限りではない。この記事では扱っていない。)

後述するrunコマンドが示すように、Dockerホスト上のトランスポートを開いている。
これが意味するのは、Dockerシステムが自動的に当該トランスポートについてファイアーウォールをオープンするということである。

したがって、Dockerホストマシンがインターネットにダイレクトに接している場合には、外部にデスクトップ環境を晒すことになり非常に非常に危険である。


◯Dockerは次のページの方法で導入した。



◯Dockerホストの情報(CentOS 7 / Docker-ce stable 20.10.5)

[root@localhost ~]# uname -r
3.10.0-1160.15.2.el7.x86_64



■LinuxデスクトップMATEコンテナのセットアップ

1、システムの更新

◯まず、CentOS公式のCentOS7初期イメージを使って次のコマンドでコンテナを動作させた。

docker run -d -i -t --init --name centos7-mate-ja-setup centos:centos7 /bin/bash
Unable to find image 'centos:centos7' locally
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:centos7
(説明)
-d フラグ
コンテナをバックグラウンドで動作させる。コンテナのルートプロセスが終了するとコンテナは終了する。

-t フラグ
疑似端末で動作させる。

--init フラグ
コンテナ内でPID 1として動作させるルートプロセスを指定することで、コンテナ終了時にゾンビプロセスの完全な解消が可能になる。引数なしでdocker-initというプロセスが動作する。

・ -i フラグ
ここでは指定しているが、使用しなくても動作した。
バックグラウンドで動作すればよいのでインタラクティブである必要はないため。


◯バックグラウンドで動作中のコンテナに接続した。

docker exec -it centos7-mate-ja-setup /bin/bash
[root@e8394b6f7b13 /]#


◯ロケールをフルで利用できるようにする。(大切な手順)

この段階では日本語ロケールは認識できなかった。

[root@e8394b6f7b13 /]# locale -a | grep ja


次の通り、ファイルを編集して下記のようにコメントアウトした。
(後で述べているが、これによって日本をはじめ多量のロケールが導入可能になる。)
[root@e8394b6f7b13 /]# vi /etc/yum.conf
#override_install_langs=en_US.utf8

上記ファイル編集後に、次のコマンドでシステム更新を行った。
(D-Bus関係エラーが一つ生じたが結果的にMATEデスクトップ環境は動作した。)

[root@e8394b6f7b13 /]# yum update
Updating   : systemd-219-78.el7_9.3.x86_64                                                                                                                       16/48 
Failed to get D-Bus connection: Operation not permitted

Updated:
  bind-license.noarch 32:9.11.4-26.P2.el7_9.4 centos-release.x86_64 0:7-9.2009.1.el7.centos  coreutils.x86_64 0:8.22-24.el7_9.2   curl.x86_64 0:7.29.0-59.el7_9.1      
  device-mapper.x86_64 7:1.02.170-6.el7_9.3   device-mapper-libs.x86_64 7:1.02.170-6.el7_9.3 glib2.x86_64 0:2.56.1-8.el7          glibc.x86_64 0:2.17-323.el7_9        
  glibc-common.x86_64 0:2.17-323.el7_9        kpartx.x86_64 0:0.4.9-134.el7_9                libblkid.x86_64 0:2.23.2-65.el7_9.1  libcurl.x86_64 0:7.29.0-59.el7_9.1   
  libmount.x86_64 0:2.23.2-65.el7_9.1         libsmartcols.x86_64 0:2.23.2-65.el7_9.1        libuuid.x86_64 0:2.23.2-65.el7_9.1   openssl-libs.x86_64 1:1.0.2k-21.el7_9
  python.x86_64 0:2.7.5-90.el7                python-libs.x86_64 0:2.7.5-90.el7              systemd.x86_64 0:219-78.el7_9.3      systemd-libs.x86_64 0:219-78.el7_9.3 
  tzdata.noarch 0:2021a-1.el7                 util-linux.x86_64 0:2.23.2-65.el7_9.1          vim-minimal.x86_64 2:7.4.629-8.el7_9 zlib.x86_64 0:1.2.7-19.el7_9         

Complete!
上記のように、glibc-common が更新されたことを確認した。
これによってファイル編集と連動して多量のロケールが導入されると考えられる。

もしも、glibc-common の更新がなければ、yum reinstall glibc-common を行うと良いと考えられる。(検証していない。)


アップデート後、導入済みロケールについて確認した。

[root@e8394b6f7b13 /]# locale -a | grep ja
ja_JP
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc
[root@e8394b6f7b13 /]# locale -a | wc -l
791
この結果が示すように日本語ロケールだけでなく、他に多量のロケールが導入されたことがわかる
これにより、CentOS7 minimal isoを通常のマシンに導入した場合と同じになったのではないかと思う
おそらくこの状態ではじめてMATEデスクトップの完全な日本語化に成功すると考えられる
上記日本語ロケールだけの導入ではMATEデスクトップの日本語化は不完全だった。
(その場合には一部のみが日本語化されるにとどまる。)


ついでに、コンテナでタイムゾーンも合わせておく。

# ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime


◯コンテナの再起動を行った

コンテナから出た。

[root@e8394b6f7b13 /]# exit


Dockerホスト上で、Dockerコマンドによりコンテナをストップし、再びスタートした。

[root@localhost ~]# docker stop centos7-mate-ja-setup
centos7-mate-ja-setup
[root@localhost ~]# docker start centos7-mate-ja-setup
centos7-mate-ja-setup

再びコンテナに接続した。

[root@localhost ~]# docker exec -it centos7-mate-ja-setup /bin/bash
[root@e8394b6f7b13 /]#


2、デスクトップ環境構築のためのインストールを行った。

◯X Window systemのインストールを行った。

(コマンド実行中に生じたエラー情報についてのみ載せた。最終的にMATEデスクトップの利用には今の所支障はない。)

[root@e8394b6f7b13 /]# yum groupinstall "X Window system"
Install  11 Packages (+349 Dependent packages)

Total download size: 339 M
Installed size: 1.1 G


  Installing : nettle-2.7.1-8.el7.x86_64          38/360
install-info: No such file or directory for /usr/share/info/nettle.info

  Installing : 7:device-mapper-event-1.02.170-6.el7_9.3.x86_64          50/360 
Failed to get D-Bus connection: Operation not permitted
warning: %post(device-mapper-event-7:1.02.170-6.el7_9.3.x86_64) scriptlet failed, exit status 1
Non-fatal POSTIN scriptlet failure in rpm package 7:device-mapper-event-1.02.170-6.el7_9.3.x86_64

  Installing : oddjob-0.31.5-4.el7.x86_64          113/360 
dbus-daemon: no process found

  Installing : oddjob-mkhomedir-0.31.5-4.el7.x86_64          114/360 
dbus-daemon: no process found

  Installing : 7:lvm2-2.02.187-6.el7_9.3.x86_64          124/360 
Failed to get D-Bus connection: Operation not permitted
Failed to get D-Bus connection: Operation not permitted
Failed to get D-Bus connection: Operation not permitted
warning: %post(lvm2-7:2.02.187-6.el7_9.3.x86_64) scriptlet failed, exit status 1
Non-fatal POSTIN scriptlet failure in rpm package 7:lvm2-2.02.187-6.el7_9.3.x86_64

  Installing : chrony-3.4-1.el7.x86_64          266/360 
Failed to get D-Bus connection: Operation not permitted

No '/dev/log' or 'logger' included for syslog logging
findmnt: can't read (null): No such file or directory
findmnt: can't read (null): No such file or directory


Complete!

◯MATE Desktopのための一連のパッケージの導入を行った。

まず、必要なパッケージリポジトリの追加を行った。

[root@9706b98eb163 /]# yum install epel-release
Installed:
epel-release.noarch 0:7-11
Complete!

つづいて、MATE Desktopのインストールを行った。

(コマンド実行中に生じたエラー情報についてのみ載せた。最終的にMATEデスクトップの利用には今の所支障はない。)

[root@e8394b6f7b13 /]# yum groupinstall "MATE Desktop"
Install  138 Packages (+360 Dependent packages)

Total download size: 484 M
Installed size: 1.5 G

  Installing : which-2.20-7.el7.x86_64          36/498 
install-info: No such file or directory for /usr/share/info/which.info.gz

  Installing : recode-3.6-38.el7.x86_64         174/498 
install-info: No such file or directory for /usr/share/info/recode.info.gz

  Installing : libchewing-0.3.4-6.el7.x86_64          191/498 
install-info: No such file or directory for /usr/share/info/libchewing.info


Complete!

◯VNC SERVERの導入を行った。

これによりヘッドレス(モニタがなし)で、ネットワーク越しにリモート接続できるようになる。

[root@e8394b6f7b13 /]# yum install tigervnc-server
Installed:
  tigervnc-server.x86_64 0:1.8.0-22.el7

Complete!

◯日本語入力のためのパッケージを導入した。(オプション)

デフォルトでも入力システムが存在する。
MOZCを利用したい場合のみインストールを行う。

また、日本語入力を行うには、MATEデスクトップ環境が整ってアクセス利用できるようになった後に最終設定が必要である。

[root@356cab84b434 /]# yum install ibus-mozc
Installed:
  ibus-mozc.x86_64 0:2.17.2322.102-1.el7

Dependency Installed:
  libmng.x86_64 0:1.0.10-14.el7                    mozc.x86_64 0:2.17.2322.102-1.el7            pciutils.x86_64 0:3.5.1-3.el7                                          
  pciutils-libs.x86_64 0:3.5.1-3.el7               protobuf.x86_64 0:2.5.0-8.el7                qt.x86_64 1:4.8.7-9.el7_9                                              
  qt-settings.noarch 0:19-23.12.el7.centos         qt-x11.x86_64 1:4.8.7-9.el7_9                xemacs-filesystem.noarch 0:21.5.34-8.20140605hgacf1c26e3019.el7        
  zinnia.x86_64 0:0.06-22.el7                      zinnia-tomoe-ja.x86_64 0:0.06-22.el7        

Complete!



3、ユーザーのデスクトップセッションを始動するための設定を行った。

以下では1ユーザーの設定を行っている。
複数人のために複数セッションが必要な場合はここで作成した1ユーザーの設定をコピーするとよい。(後述)


◯Linuxユーザーを作成し、パスワードを設定した。
名称などは任意だがつづく設定でも同じユーザー名を当てはめる必要がある。

[root@e8394b6f7b13 /]# useradd user01
[root@e8394b6f7b13 /]# passwd user01
Changing password for user user01.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

◯VNCユーザー(デスクトップ利用者)としての設定を行った。
(上記のように設定済みのLinuxユーザーである必要がある。)

当該ユーザーに切り替えた。

[root@e8394b6f7b13 /]# su user01


VNCデスクトップセッションにアクセスするためのパスワードを設定した。

[user01@e8394b6f7b13 /]$ vncpasswd 
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used

いったんVNC SERVERを起動することで、設定ファイルの生成を行わせた。
(ユーザーのデスクトップ番号を2番で作成した。これは後にTCPポート番号で利用される。)

[user01@e8394b6f7b13 /]$ vncserver :2
xauth:  file /home/user01/.Xauthority does not exist

New 'e8394b6f7b13:2 (user01)' desktop is e8394b6f7b13:2

Creating default startup script /home/user01/.vnc/xstartup
Creating default config /home/user01/.vnc/config
Starting applications specified in /home/user01/.vnc/xstartup
Log file is /home/user01/.vnc/e8394b6f7b13:2.log

上記のようにxstartupファイルの生成を確認できたので、次のコマンドでVNC SERVERを停止した。

[user01@e8394b6f7b13 /]$ vncserver -kill :2
Killing Xvnc process ID 12978

生成されたxstartupファイルのバックアップを行った。

[user01@e8394b6f7b13 /]$ cp /home/user01/.vnc/xstartup /home/user01/.vnc/xstartup.org


日本語表示のMATEデスクトップを起動できるようにxstartupファイルの修正を行った。

修正した箇所は色付きの4行である。他はデフォルトのままである。
青文字はコメントアウトを行い、色マーカー部分は追加した部分である。

緑マーカー…ロケール(日本語表示など)に関する設定
橙マーカー…漢字入力に関する設定
青マーカー…MATEデスクトップ環境に関する設定

また、必ず下記の順番になるようにすることが大切である。

[user01@e8394b6f7b13 /]$ vi /home/user01/.vnc/xstartup
#!/bin/sh

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS

export LANG=ja_JP.UTF-8

export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus

# exec ibus-daemon -drx &

exec mate-session &
#/etc/X11/xinit/xinitrc

# Assume either Gnome or KDE will be started by default when installed
# We want to kill the session automatically in this case when user logs out. In case you modify
# /etc/X11/xinit/Xclients or ~/.Xclients yourself to achieve a different result, then you should
# be responsible to modify below code to avoid that your session will be automatically killed
if [ -e /usr/bin/gnome-session -o -e /usr/bin/startkde ]; then
    vncserver -kill $DISPLAY
fi


英語表記に戻したい場合は、export LANG=en_US.utf8 にすればよいだろう。


※ 上で「exec ibus-daemon -drx」をコメントアウトしている。この理由は次に示す不具合が生じたからだ。
 後で、複数ユーザーに対応するためにVNCセッションを複数動作させることをしているが、その一部のユーザーセッションにおいて、メモ帳アプリやThunderbirdでは日本語入力できるものの、Firefoxだけで日本語入力ができない現象が生じた。(ただし、その場合、そのユーザーのデスクトップでターミナルを開いて、xstartupに記述した「exec ibus-daemon -drx」を実行すれば解消したが、不便なので次のように代替方法を用いる。)
 そこで、代わりに、MATEデスクトップのユーザーセッションのプログラムスタートアップ機能を用いて、「ibus-daemon -drx」を起動することにした。この後、MATEデスクトップが起動してから、ユーザーごとに設定する。そのため、上のスクリプトでは、関連する環境変数だけを登録しておく


 つぎのようにファイルを作成して、MATEスタートアップにibus-daemonを登録する。

[user01@e8394b6f7b13 /]$ vi /home/user01/.config/autostart/ibus-daemon.desktop 
[Desktop Entry]
Type=Application
Exec=/usr/bin/ibus-daemon -drx
Hidden=false
X-MATE-Autostart-enabled=true
Name[ja_JP]=Start ibus daemon
Name=Start ibus daemon
Comment[ja_JP]=AKIRA
Comment=AKIRA
 (MATEデスクトップが起動してから、mate-session-propertiesコマンドで開くウインドウからも登録できる。)



このユーザーについての基本設定は完了した。

rootユーザーに戻った。
[user01@e8394b6f7b13 /]$ exit
exit
[root@e8394b6f7b13 /]#



4、CUPSの導入(プリンタシステムが必要な場合)


MATEデスクトップコンテナでも印刷システムが使えるようにcupsを導入した。
ただし、実際にプリンタに接続するための設定も別に必要になる。

コンテナはできるだけ他の設定を入れたくないので、私の場合は次のページのようにプリンターサーバーを構築した。
プリンターサーバーにブリンタ依存の個別ドライバを入れて個別のプリンタとのやり取りを任せる。

デスクトップ側からはプリントアウト内容はPostScriptという記述のままプリンタサーバーに送信するための仮想プリンタのみインストールすることができる。
詳しくは下記ページをご参照ください。


とりあえず、MATEデスクトップコンテナには印刷システムのCUPSのみインストールした。

[root@e8394b6f7b13 /]# yum install cups
Complete!


5、コンテナ起動時に必要なシステムが自動起動するためのスクリプトを作成した。

作成するスクリプトは、cupsdを起動するコマンドと、
VNC SERVERによるユーザー毎のデスクトップセッションを起動するためのコマンドで成り立っている。

まず、スクリプトの格納場所を作成した。(rootディレクトリにまとめることにした。)

[root@e8394b6f7b13 /]# mkdir -p /root/Script/


スクリプトは次のように作成した。

[root@e8394b6f7b13 /]# vi /root/Script/runserver.sh
#!/bin/bash

/usr/sbin/cupsd &

/usr/bin/rm /tmp/* -rf
/usr/bin/rm /tmp/.* -rf

/usr/bin/rm -f /tmp/.X2-lock
/usr/bin/su -c "/usr/bin/vncserver -kill :2" user01
/usr/bin/su -c "/usr/bin/vncserver :2" user01

/bin/bash

(説明)
/usr/sbin/cupsd &
cupsdサービスを起動している。(上記手順でインストールした場合)

/usr/bin/rm /tmp/* -rf
/usr/bin/rm /tmp/.* -rf
/tmpディレクトリの中身を全て削除し初期化を行っている。これは「ICEの監視ソケットを生成できませんでした。Cannot establish any listening Sockets」というエラーが発生する場合があるのを避けるためである。

rm -f /tmp/.X2-lock
コンテナの終了のタイミングで次のようなエラーが生じてデスクトップセッションを開始できない場合を避けるためのものである。下記はエラーの例である。(user11が、vncserver :11 でセッションを開始したときのエラー)
[user11@6097c5fce671 /]$ vncserver :11

Warning: 6097c5fce671:11 is taken because of /tmp/.X11-lock
Remove this file if there is no X server 6097c5fce671:11
A VNC server is already running as :11

suコマンドの引数に実行コマンドを渡して、指定ユーザー権限でvncserverが起動するようにしている。

最後の /bin/bash は、このスクリプトをコンテナの起動スクリプトするときに、スクリプト実行完了でコンテナが終了してしまわないようにするためのものである。 


つづいて、作成したスクリプトに実行権限を与えた。

[root@e8394b6f7b13 /]# chmod +x /root/Script/runserver.sh


以上で、「LinuxデスクトップMATEコンテナのセットアップ」は完了した。
つづいて、コンテナのイメージ化を行う。

どうしてもイメージに加えておきたい基本的な設定があればこの段階までで行うと良い。
しかし、一応ここまでで基本的な設定段階としてイメージ化しておくと良いのではないかと思う。



■作成したデスクトップ環境の基本コンテナのイメージ化と動作テストを行った。


コンテナから離脱し、Dockerホストに戻った。
[root@e8394b6f7b13 /]# exit
exit

◯コンテナのイメージ化を行った。

Dockerホストにおいて、コンテナを停止させた。

[root@localhost ~]# docker stop centos7-mate-ja-setup
centos7-mate-ja-setup

コンテナのイメージ化を行った。

[root@localhost ~]# docker commit centos7-mate-ja-setup image-centos7-ja-mate-user01_20210309

作成したイメージは次のコマンドで確認できた。

[root@localhost ~]# docker image list


◯作成したイメージを用いて、新しいコンテナを起動した。

(注意)
必ず、このDockerホストは安全なLAN内で動作させるようにすること。
さもなければ外部から不正アクセスを許してしまうことになる!
(独自のDocker仮想ネットワークを構築するなど適切なポリシーで工夫を行うならこの限りではない。この記事では扱っていない。)

下記コマンドが示すように、Dockerホスト上のトランスポートを開いている。
これが意味するのは、Dockerシステムが自動的に当該トランスポートについてファイアーウォールをオープンするということである。
したがって、Dockerホストマシンがインターネットにダイレクトに接している場合には、外部にデスクトップ環境を晒すことになり非常に非常に危険である。

これまでの手順で、複数ユーザーのデスクトップセッションを設定した場合は、
下記コマンドの、-p 5952:5902 だけでなく、さらに存在するディスプレイの番号からリモートアクセス用トランスポート番号を開放する必要がある。オプションを並列させて指定する。

[root@localhost ~]# docker run -d -i -t --shm-size=256m --init -p 5952:5902 --name centos7-ja-mate-user01 image-centos7-ja-mate-user01_20210309 /root/Script/runserver.sh

(説明)
・image-centos7-ja-mate-user01_20210309
作成したイメージ

・/root/Script/runserver.sh
コンテナ内で作成済みの自動起動用のスクリプト

・--shm-size=256m
一時ファイルのための領域を設定する。
この設定がなければ、ブラウザの動画再生がうまくできずフリーズした。

・-p 5952:5902
指定された番号についてホストのトランスポートを開き、それを指定した番号のコンテナのトランスポートに結びつける。
この例では、5952がホスト側で、5902がコンテナ側になる。

ポートをオープンできない場合は、Dockerの標準ネットワークでなく、独自に構築した仮想ネットワークを設定するなど工夫が必要がある。ここでは扱わない。
また、インターネット越しにリモートアクセスさせたい場合には、そのように独自に仮想ネットワークを構築した上で、IPsecなどの安全な方法でアクセスさせるべきである。



◯コンテナの動作後、クライアントマシンにおいてVNC Viewerからアクセスした。

IPアドレスとトランスポート5952はDockerホストのものである。
runコマンドで指定したとおり、5952はコンテナの5902ポートに転送される。
5902ポートはディスプレイ番号2番に対応している。


パスワードの入力を求められると、vncpasswdで設定したものを入力した。

すると、次のように日本語表示になったMATEデスクトップ環境にアクセスできた。

日本語入力を行うには、MATEデスクトップ環境において最終設定が必要です。
特に、VNC経由の場合には切り替え日本語 / 英語スイッチの変更キーの変更が必要です。
設定方法は次のページを参照してください。







◯デスクトップ環境の再起動方法

次のように、Dockerコンテナをストップしてからスタートするだけで良かった。
編集中のファイルなど保存されていないデータは消滅するのは、通常のデスクトップ環境と同じ。

Dockerホストにおいて次のように対象コンテナをストップしてからスタートした。

[root@localhost ~]# docker stop centos7-ja-mate-user01
[root@localhost ~]# docker start centos7-ja-mate-user01

そして、再びクライアントマシンにおいてVNC Viewerからアクセスすれば繋がった。



■MATEデスクトップのそのほかの設定について

・ログアウトなどの禁止の設定を行う方法

・SAMBAファイルサーバーへの接続方法

・LibreOfficeのインストール

・Google Chromeのインストール

Chromeは、上のページを参考にしてインストールを行った。
ただし、この後で示すように、--no-sandbox オプションを付けなければ起動できなかった。
(セキュリティー上問題があるためこのようにすべきでない。)

また、特定のサイトを開くとタブがクラッシュして開けなかった。
Chrome(104.0.5112.101 2022年8月24日現在のもの)で、楽天のページ「https://www.rakuten.co.jp/」を開こうとすると、「このウェブページの表示中に問題が発生しました。」と表示され、タブがクラッシュした。リロードしても、シークレットタブでも、キャッシュを削除しても改善しなかった。
しかし、その他の有名なサイト、例えば「yahoo.co.jp」、「amazon.co.jp」などは正常に開くことができた。

同様に、--no-sandboxオプション付きで起動したEdge(Linux版rpm:104.0.1293.63 2022年8月24日現在のもの)でも、この楽天サイトでタブがクラッシュした。「このページには問題があります」と表示された。

一方で、Firefox(91.11.0esr 2022年8月24日現在yumで導入できたもの)では、この楽天サイトは正常に表示された。


$ google-chrome-stable --no-sandbox

ランチャーメニューに登録されているchrome起動コマンドも編集した。

次のコマンドを実行して、メニュー編集ウインドウを開く。
$ mozo 

次の写真のように、インターネットメニューのアイテムの欄からGoogle Chromeを選び、プロパティーボタンを押した。

開くランチャのプロパティウインドウ内のコマンドのテキストボックスには最初は次のコマンドが設定されていた。
/usr/bin/google-chrome-stable %U
この起動コマンドに、次のように --no-sandbox オプションを追加した。
/usr/bin/google-chrome-stable %U --no-sandbox


◯ FirefoxでYoutubeの「LIVE」が再生できない問題への対処方法

Firefoxで、次のページを開いた。
https://www.jeffersonscher.com/sumo/html5-video.html

すると、次のように、
「MP4/H.264 avc1.42001E, mp4a.40.2 can't be played」
「MSE & H.264 video/mp4; codecs="avc1.4d401e" not supported」と表示された。


 次のようにして、パッケージを導入した。

# yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
# yum install epel-release
# yum install ffmpeg ffmpeg-devel
Installed:
  ffmpeg.x86_64 0:3.4.11-1.el7                                                     ffmpeg-devel.x86_64 0:3.4.11-1.el7                                                    

Dependency Installed:
  SDL2.x86_64 0:2.0.14-2.el7                    ffmpeg-libs.x86_64 0:3.4.11-1.el7                             jack-audio-connection-kit.x86_64 0:1.9.9.5-6.el7           
  lame-libs.x86_64 0:3.100-1.el7                libass.x86_64 0:0.13.4-6.el7                                  libavdevice.x86_64 0:3.4.11-1.el7                          
  libffado.x86_64 0:2.1.0-4.el7                 libmfx.x86_64 0:1.21-2.el7                                    libmodplug.x86_64 1:0.8.9.0-9.el7                          
  libva.x86_64 0:1.8.3-1.el7                    libvdpau.x86_64 0:1.1.1-3.el7                                 libxml++.x86_64 0:2.37.1-1.el7                             
  numactl-libs.x86_64 0:2.0.12-5.el7            ocl-icd.x86_64 0:2.2.12-1.el7                                 openal-soft.x86_64 0:1.16.0-3.el7                          
  opencore-amr.x86_64 0:0.1.5-6.el7             soxr.x86_64 0:0.1.2-1.el7                                     vid.stab.x86_64 0:1.1-4.20170830gitafc8ea9.el7             
  vo-amrwbenc.x86_64 0:0.1.3-1.el7              x264-libs.x86_64 0:0.148-24.20170521gitaaa9aa8.el7            x265-libs.x86_64 0:2.9-3.el7                               
  xvidcore.x86_64 0:1.3.4-2.el7                 zvbi.x86_64 0:0.2.35-1.el7                                   

Complete!

 すると、先程のWEBページで確認すると、コーデックが有効になったことが確認できた。
Youtubeの「LIVE」も再生されるようになった。





■複数ユーザーセッションの作成手順

以下では、追加であと2ユーザー分のデスクトップ環境を作成している。
ただしDockerホストのメモリーなどのリソースが十分でなければならない。

以上で1ユーザー(user01)についてのデスクトップ環境の設定が済んだする。
もし複数ユーザーセッションを構築したい場合は、このユーザー(user01)の設定をコピーすれば良い。

以下の手順は上記からの流れでMATEデスクトップコンテナが動作していることを想定している。

◯コンテナに接続

Dockerホストにおいて次のコマンドで対象コンテナに接続した。

[root@localhost ~]# docker exec -it  centos7-ja-mate-user01 /bin/bash
[root@51d854032c59 /]#


◯動作中の場合、user01デスクトップセッションを終了させた

[root@51d854032c59 /]# su user01
[user01@51d854032c59 /]$ vncserver -kill :2
Killing Xvnc process ID 24
[user01@51d854032c59 /]$ exit
exit
[root@51d854032c59 /]#



◯追加ユーザーの作成

試しに追加で2ユーザー分のデスクトップセッションを作成するものとする。
user名は任意である。ここでは、user14と、user15ということにしている。

(追加分1)
[root@51d854032c59 /]# useradd user14
[root@51d854032c59 /]# passwd user14
Changing password for user user14.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
(追加分2)
[root@51d854032c59 /]# useradd user15
[root@51d854032c59 /]# passwd user15
Changing password for user user15.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

◯設定情報のコピー

user01は上記の手順で既にデスクトップ環境の設定済みである。
このuser01の設定情報を、追加ユーザーの設定情報として流用する。
コピーするだけである。

user14とuser15をuseraddコマンドで作成した段階では、
/home/user14と、/home/user15ディレクトリ内は空だった。
空でない場合、下記のrsyncコマンドにオプションで、--deleteをつけるとそれらをクリアできる。
データが削除されるので注意すること。

また、下記のrsyncコマンドは、スラッシュの有無で挙動が変わるので注意すること。


(追加分1)
既に設定済みのuser01の設定情報をuser14のものとしてコピーし、
ディレクトリ内コンテンツの所有者とグループをuser14に変更した。

[root@51d854032c59 /]# rsync -av /home/user01/ /home/user14/
[root@51d854032c59 /]# chown user14:user14 /home/user14/ -R

(追加分2)
[root@51d854032c59 /]# rsync -av /home/user01/ /home/user15/
[root@51d854032c59 /]# chown user15:user15 /home/user15/ -R


たくさんのユーザーを追加する場合、たとえば次のようにすることもできる。
# for i in 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ; do USERNO=$i ; chown user$i:user$i /home/user$i/ -R ; done


◯サーバー起動スクリプトの編集

既に上記の手順で作成済みのスクリプトの編集を行った。

下記のマーカー部分に注意して、追加ユーザー分について編集する。(アンダーラインのところ)
ディスプレイ番号が重ならないようにすること。

[root@51d854032c59 /]# vi /root/Script/runserver.sh
#!/bin/bash
 
/usr/sbin/cupsd &

/usr/bin/rm /tmp/* -rf
/usr/bin/rm /tmp/.* -rf
 
/usr/bin/rm -f /tmp/.X2-lock
/usr/bin/su -c "/usr/bin/vncserver -kill :2" user01
/usr/bin/su -c "/usr/bin/vncserver :2" user01

/usr/bin/rm -f /tmp/.X14-lock
/usr/bin/su -c "/usr/bin/vncserver -kill :14" user14
/usr/bin/su -c "/usr/bin/vncserver :14" user14

/usr/bin/read -t 10 -p "Starting VNC SERVER ..., waiting for 10 second"

/usr/bin/rm -f /tmp/.X15-lock
/usr/bin/su -c "/usr/bin/vncserver -kill :15" user15
/usr/bin/su -c "/usr/bin/vncserver :15" user15


/bin/bash

ディスプレイ番号(14や15 )は、トランスポート番号の決定で利用される。
14番ならば、5900+14で、5914 がトランスポートポート番号になる。
このトランスポート番号が他のサービスとバッティングしないようにしなければいけない。

/usr/bin/read -t 10 -p "Starting VNC SERVER ..., waiting for 10 second"
次のセッションをスタートさせるまでに待機時間を念の為に設けている。これは、日本語入力がうまくできなかったり、デスクトップ環境が正しく起動しなくなったりする問題を避けるために行っている。

ところで、さらに複数のユーザーがある場合は、各ユーザーごとのセッション作成コマンドを記述するのは大変なので、
次のループを組み込んでおくと便利である。
下記の方法でうまく10ユーザー(11から20)のデスクトップセッションを作成できた。

for NUM in 11 12 13 14 15 16 17 18 19 20
        do
                /usr/bin/rm -f /tmp/.X$NUM-lock
                /usr/bin/su -c "/usr/bin/vncserver -kill :$NUM" user$NUM
                /usr/bin/su -c "/usr/bin/vncserver :$NUM" user$NUM
                /usr/bin/read -t 10 -p "Starting VNC SERVER ..., waiting for 10 second"
        done


◯追加ユーザーセッションの動作テスト

上記設定を有効化するにはこのコンテナの再起動を行うだけである。

しかし、複数ユーザー分のネットワークポートを通す必要があるので、
一旦イメージ化してからdocker runコマンドでコンテナを起動する。


・コンテナの停止

デスクトップ上などの未保存ファイルは消えるので予め保存しておくこと。

[root@localhost ~]# docker stop centos7-ja-mate-user01
centos7-ja-mate-user01


・コンテナのイメージ化を行った。

新しいイメージを作成している。

[root@localhost ~]# docker commit centos7-mate-ja-setup image-centos7-ja-mate-3user_20210329


・コンテナを作成したイメージから起動した。

追加ユーザー分のネットワークポート設定も行っている。

[root@localhost ~]# docker run -d -i -t --shm-size=256m --init -p 5952:5902 -p 5964:5914 -p 5965:5915 --name centos7-ja-mate-3user image-centos7-ja-mate-3user_20210329 /root/Script/runserver.sh

ユーザー名「Dockerホスト上のポート:コンテナに転送先ポート」(:ディスプレイ番号)
user01 「5952:5902」 (:2)
user14 「5964:5914」 (:14)
user15 「5965:5915」 (:15)

そして、同様にしてVnc Viewerで接続する。(ディスプレイ番号は異なる。)

デスクトップ環境が起動するまでに少し時間がかかった。
早く接続しようとするとつながらなかった。


これで複数ユーザーのデスクトップ環境の管理がとても楽になる。

ところで、もし、Docker標準のネットワークでなく、独自Dockerネットワークを構築しているなら、
docker runコマンドでのポート転送設定も不要となる。
そのため上記のようにユーザーセッションを追加の度にわざわざイメージ化とコンテナ再作成は不要となる。
コンテナの再起動のみですぐに追加したデスクトップセッションが利用できるようになる。
ここでは扱っていない。


以上


<参考>
◯CentOS7
・CentOS 7 コンテナに消えない日本語ロケールを追加する
< https://qiita.com/teruo-oshida/items/08cb84efc2b581b0a439 > 2021年3月6日

・Docker コンテナの時刻同期(時刻データ)について
< https://qiita.com/hirotaka-tajiri/items/f5900b236a005d7ffe58 > 2021年4月2日


◯Docker
・Docker上のpuppeteerがPage crashしてしまうときはshmサイズを疑う
< https://qiita.com/windyakin/items/00b085902547570eebc6 > 2021年2月25日

・Docker run reference
< https://docs.docker.com/engine/reference/run/ > 2021年3月9日

・Docs » Engine リファレンス » Docker run リファレンス
< https://docs.docker.jp/engine/reference/run.html > 2021年3月9日

・Dockerの資源管理について(CPU、メモリ)
< https://www.nedia.ne.jp/blog/tech/network/2020/06/09/16500 > 2021年4月2日

・What are pseudo terminals (pty/tty)?
< https://unix.stackexchange.com/questions/21147/what-are-pseudo-terminals-pty-tty > 2021年3月9日


◯Linux端末
・Linux 端末の歴史と違い
< https://teratail.com/questions/76154 > 2021年3月9日


◯MATEデスクトップ環境構築
・【Linux CentOS 7】Dockerコンテナ(CentOS7)にデスクトップ環境(MATE)を構築してVNCでリモート接続できるようにした【Docker-ce 18.06.1.ce】
< http://akira-arets.blogspot.com/2018/08/docker-mate-desktop-vncserver.html > 2021年3月6日

・CentOS7でMATEを使う
< https://blue-red.ddo.jp/~ao/wiki/wiki.cgi?page=CentOS7%A4%C7MATE%A4%F2%BB%C8%A4%A6 > 2022年8月24日

・impish (1) mate-session.1.gz
< https://manpages.ubuntu.com/manpages/impish/man1/mate-session.1.html > 2022年8月24日

・MATE
< https://wiki.archlinux.jp/index.php/MATE > 2022年8月24日



◯Firefoxのコーデック
・CentOS 8 Workstation Firefox does not play live Youtube streams
< https://forums.centos.org/viewtopic.php?t=74107 > 2022年8月10日

・Can't play Live Stream Videos on Firefox
< https://support.mozilla.org/en-US/questions/1322086 > 2022年8月10日

・How to Install and Use FFmpeg on CentOS 7
< https://linuxize.com/post/how-to-install-ffmpeg-on-centos-7/ > 2022年8月10日


投げ銭

★当サイトへの投げ銭(PayPal)★

Ad

Ad