20200120のLinuxに関する記事は13件です。

DNSのdigコマンド

digコマンドを使って権威DNSサーバーを直接調べるとき

+norec-xオプションを付ける
+norecは非再帰検索を実行
-xは逆引き検索でIPアドレスを直接指定できる

$ dig +norec @localhost -x 192.0.2.100

digコマンドの使い方

  • 解決したDNSサーバを確認したい場合は+identifyオプションを追加
  • デフォルトはAレコード検索。 NSレコード指定じは nsをつける
  • トレースは+traceオプション
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux

VortualBox
1.jpg
2.jpg

Ubuntu
3.jpg
4.jpg
5.jpg

VortualBox インストール
6.jpg
7.jpg
8.jpg
9.jpg
10.jpg
11.jpg
12.jpg
13.jpg
14.jpg
15.jpg
16.jpg
17.jpg
18.jpg
19.jpg
20.jpg
21.jpg
22.jpg
23.jpg
24.jpg
25.jpg
26.jpg
27.jpg
28.jpg
29.jpg
30.jpg
31.jpg
32.jpg
33.jpg
34.jpg
35.jpg
36.jpg
37.jpg
38.jpg

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux 環境構築

VirtualBox ダウンロード
1.jpg
2.jpg

Ubuntu ダウンロード
3.jpg
4.jpg
5.jpg

VirtualBox インストール
6.jpg
7.jpg
8.jpg
9.jpg
10.jpg
11.jpg

VirtualBox 新規
12.jpg
13.jpg
14.jpg
15.jpg
16.jpg
17.jpg
18.jpg

VirtualBox 設定
19.jpg
20.jpg
21.jpg
22.jpg
23.jpg
24.jpg

VirtualBox 起動
25.jpg
26.jpg
27.jpg
28.jpg
29.jpg
30.jpg
31.jpg
32.jpg
33.jpg
34.jpg
35.jpg
36.jpg
37.jpg
38.jpg

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Oracle Database XE導入手順纏め

【導入環境】

Oracle Linux 7

・Oracle Database XE取得

(取得先)
https://www.oracle.com/technetwork/jp/database/database-technologies/express-edition/downloads/index.html
ここでは、oracle-database-xe-18c-1.0-1.x86_64.rpm取得を想定

・プレインストール取得(OL7用)

プレインストール導入プログラム
# curl -o oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm

・プレインストール導入

# yum -y localinstall oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm

・Oracle Database XEインストール

# yum -y localinstall oracle-database-xe-18c-1.0-1.x86_64.rpm

・Oracle Database XEデータベースインスタンス作成

# /etc/init.d/oracle-xe-18c configure

必要入力項目:

  • SYS, SYSTEM and PDBADMINパスワード
  • ホストアドレス、ポート番号
  • CDB,PDB名

・DB起動停止(OL7用)

(起動)
# systemctl start oracle-xe-18c
(停止)
# systemctl stop oracle-xe-18c
(再起動)
# systemctl restart oracle-xe-18c

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

個人的 Linuxでディスクの使用量を表示する

du -h [ディレクトリ] --max-depth=1

du -h:サイズに応じて読みやすい単位で表示される

du --max-depth=1:ディレクトリ内のサブディレクトリは表示されない
(du -dでもLinuxはできるけど、macOSはできないので注意)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

個人的 Linuxでディスクの使用量を大きい順に表示する

du -h [ディレクトリ] --max-depth=1 | sort -nr

du -h:サイズに応じて読みやすい単位で表示される

du --max-depth=1:ディレクトリ内のサブディレクトリは表示されない
(du -dでもLinuxはできるけど、macOSはできないので注意)

sort -n:文字列を数値と見なして並べ替える

sort -r:逆順で並べ替える

sort -nr:数値の大きい順に並び替える

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

GCP初心者がGCEでマイクラサーバを建ててみた ~サーバ構築編~

はじめに

GCPを初めて半年未満の初心者が勉強のためにマイクラサーバを建ててみたって話です。

目標

  • GCEでマイクラサーバを構築
  • Discordを使いインスタンスの制御
  • コマンドラインからGCPの操作に慣れる

構成

  • VMインスタンス1(マイクラサーバ)
  • VMインスタンス2(discordボット)
  • クラウドストレージ(バックアップ用)
  • サービスアカウント1(discordからの制御用)

構成図

マイクラサーバ構成図.png

手順

1. マイクラサーバ用のインスタンスの作成

なにはともあれマイクラサーバ用のインスタンスを作成しないとなにも始まりませんね。
基本的には以下の公式ドキュメントを参照し作成していきます。
GCPは公式ドキュメントはかなりわかりやすいものが用意されていて初心者には大助かりでした。

Compute Engine での Minecraft サーバーのセットアップ

インスタンスについては私はこのような設定で作成しました。

項目      内容      
インスタンス名 mineserver
リージョン us-central1
ゾーン us-central1-f
シリーズ N1
マシンタイプ n1-standard-2
ブートディスク CentOS 7
プリエンプティブ 有効
ネットワークインタフェース外部IP IPアドレスを作成

プリエンプティブル インスタンスの制限
プリエンプティブルインスタンスを有効にするメリットは、単純にインスタンスの費用が通常の3分の1で済みます。
今回のマイクラサーバについては、ログインしっぱなしなんて状況はほとんど無いと思いましたので、コストを大幅に下げれることを優先しプリエンプティブルインスタンスを採用しました。
目標にも記載しましたが、discordからゲームをする時だけインスタンスをスタートし、終わったらストップするのであまり障害はないものと思っています。

デメリットについては、公式ドキュメントに詳しく記載されているのでそちらを参照してください。

プリエンプティブル インスタンスの制限

永続ディスクの追加
追加ディスクについては公式ドキュメントに記載されている通りに作成します。

項目 内容
ディスク名 minecraft-disk
ディスクタイプ SSD永続タイプ
ソースタイプ 空のタイプ
サイズ 50GB

2. マイクラサーバのインストール・実行

こちらも基本的には上記に記載した公式ドキュメントを元に進めていきますが、
公式はOSがDebianを使用しており、私はCentOSを使用しているのでコマンドが一部ですが違ってきます。
違っている箇所を記載していますので、公式ドキュメントと合わせて読んでいただけると幸いです。

Java ランタイム環境(JRE)をセットアップする

$ sudo yum update

$ sudo yum install -y default-jre-headless

マイクラサーバのダウンロードとインストール
公式ではwgetを使いダウンロードしていますが、centOSにはデフォルトでwgetは入っていないのでインストールします。
ダウンロードリンクについてはminecraftのダウンロードページから最新のリンクをコピーして差し替えてください。

$ sudo yum install wget

$ wget https://launcher.mojang.com/v1/objects/f1a0073671057f01aa843443fef34330281333ce/server.jar

サーバの初回起動
下記のコマンドに「-Xms1G -Xmx3G」とあるが、こちらはメモリの割り当てをしているもので、
マシンスペックに合わせて調整が可能です。

$ java -Xms1G -Xmx3G -d64 -jar server.jar nogui

マイクラサーバを使用するにあったての合意条件
初回起動が終わると同ディレクトリ内にいくつかファイルが生成され、その中にeula.txtというファイルがあるので下記コマンドで開き編集します。
EULA の条件に同意する場合は、eula の値を false から true に変更し、保存して終了します。

$ vi eula.txt

ここに内容を記載

ここまでで最低限必要なセットアップは完了しました。
ですが、このままだとサーバからログアウトするとセッションが切れてマイクラサーバは停止してしまいます。
この問題を解決するためにscreenを使用します。
まずはscreenのインストールからです。

$ yum install screen

インストールしたscreenを使いマイクラサーバを実行します。
スクリーンコマンドの使い方は以下のページを参考にさせていただきました。

Linux screenコマンド使い方

$ screen -S mcs java -Xms1G -Xmx3G -d64 -jar server.jar nogui

クライアントがマイクラサーバにログインできるようにする

公式ドキュメントに書かれているように、マイクラサーバは25565 をデフォルト リスニング ポートとして使用しますのでそちらに合わせたファイアウォールルールを作成します。
ポートを変更したい場合は同ディレクトリにあるserver.propertiesを編集することで変更可能です。
また、server.propertiesでは他にもマイクラサーバの様々な設定を変更することが可能です。

サーバ設定ファイル(server.properties)

3. 定期バックアップの設定・実行

マイクラをプレイしていて突然クラッシュしデータが飛んでしまった。なんて悲しいことは私も何度か経験があります。
そんな時のために定期的にバックアップを取ることは必須ですよね。

基本は公式ドキュメントの「定期バックアップをスケジュールする」の項目通りに進めます。
バックアップ用のスクリプトを作成し、cronを使い定期的に実行します。

cronジョブをスケジュールするには、crontabに書き込む必要があります。

$ crontab -e

//以下crontabの内容
0 */4 * * * /home/minecraft/backup.sh

上記の設定をすると4時間ごとにbackup.shを実行されるようになります。
公式ドキュメントでは4時間でされていますが、私はクラッシュし復旧させる際に4時間も前の状態に戻るのは精神的にきついので1時間ごとにしました(笑)。
またcronについて詳細は以下のページを参考にさせていただきました。

cronの設定方法

バックアップを世代保存する
バックアップを取り続けるだけですと、ファイルが膨大になってしまいますので一定の世代分だけを常に残すように設定します。
CloudStorageではオブジェクトのライフサイクル管理という機能があります。
簡単に説明すると自動的に古いバックアップを削除してくれるものです。

設定については公式ドキュメントの「古いバックアップを自動的に削除する」の項目通りに進めます。
1点公式ドキュメントとは違う設定をした項目は、
[オブジェクト条件の選択] セクションで、[年齢] を選択します。年齢を 7 日間ではなく3日間にしました。
私の場合は1時間ごとにバックアップを取るので1日で24回、7日間も残すとなると168回分のバックアップが残ります。さすがにコストを考慮し3日間にしました。

まとめ

いかがでしたでしょうか、ここまででマイクラサーバの構築編は終了です。
次回は作成したマイクラサーバの操作をdiscordから実行する方法について書いていきます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux上でIntelliJを使っていて、日本語入力ができなくなった時の話

TL;DR

  • IntelliJを使っている時に、気づくと日本語入力ができなくなっていた(IMEが切り替わらない)
  • IntteliJを起動する時のJavaを切り替えると直った

環境

Ubuntu Linux 18.04 LTS。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.3 LTS
Release:    18.04
Codename:   bionic

IntelliJのバージョン。

  • 2019.3 Community Edition

事象と解決方法

起こっていた事象は、TL;DRに同じ。日本語入力に切り替えられなくて、困っていました。

IMEは、Mozcを使っています。

少し調べたら、以下のような記事を見つけたので、IntelliJの起動に使うJavaを切り替えて試してみました。

IntelliJ IDEA 2019.2等でmacOS環境において日本語入力中に発生する問題と回避策

IntelliJにバンドルされている(デフォルトで起動に使われる)Javaは、こちら。

jbr/bin/java --version
openjdk 11.0.5 2019-10-15
OpenJDK Runtime Environment (build 11.0.5+10-b520.17)
OpenJDK 64-Bit Server VM (build 11.0.5+10-b520.17, mixed mode)

以下のドキュメントを見て、今回は環境変数で設定する方法を選択。

Change boot Java runtime for IntelliJ IDEA

IntelliJ IDEAの起動Javaランタイムを変更する

OpenJDK 8で起動するようにしました。

$ IDEA_JDK=/usr/lib/jvm/java-1.8.0-openjdk-amd64

今回は、これで解決、と。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Teratermで自動SSHログインするためにとりあえずttlファイルにこれを書く

TeraTermでLinuxサーバにログインするときに聞かれるユーザー名とパスワードを、いちいち入力することが面倒な時は、自動ログインマクロを作っておくと楽です。

以下、SSHでログインする場合のソースを置きましたので、コピー&ペースト後、username,hostname,passwordを各々書き込んで、「ttlファイル」に保存してご利用ください。

鍵が必要であったり、プロキシを通過するようなケースですと、別個編集が必要となります。

username = '' #ログインユーザー名
hostname = '' #ホスト名(IPアドレスの場合が多い)
password = '' #ログインパスワード

msg = hostname
strconcat msg ':22 /ssh /2 /auth=password /user='
strconcat msg username
strconcat msg ' /passwd='
strconcat msg password
connect msg
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ディレクトリのシンボリックリンクを補完した時,末尾に"/"をつける

スラッシュつかない問題

シンボリック作成

$ ln -s /path/to/target/dir_name ~/dir_name 

2回Tabを押さないとスラッシュがつかない。

$ cd dir_na
[Tab]
$ cd dir_name 
[Tab]
$ cd dir_name/

解決

ホームディレクトリの.inputrcset mark-symlinked-directories onを記述。
私はファイル自体がなかったので作りました。

$ echo "set mark-symlinked-directories on" >> ~/.inputrc

若干の弊害

シンボリックをrmする時に/がついてしまうと、実態を消そうとしてしまう。
誤って実体を消してしまわないように注意。

# これのつもりが
$ rm dir_name

# 間違える可能性
$ rm dir_name/
rm: cannot remove 'dir_name/': Is a directory

参考文献

lsを読まずにプログラマを名乗るな!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerとディスプレイを接続して画像を表示

はじめに

Docker上でOpenCV等のビジョン系ライブラリを使用する時は、DockerコンテナとローカルPCのディスプレイを接続する必要がありますが、この方法が分からず結構な時間を要してしまいましたので、途中で遭遇したトラブルとその解決策を含めてまとめていきたいと思います!

開発環境

Ubuntuです!詳細は下記コマンドでチェックしておきます!

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

$ arch
x86_64

Dockerイメージのダウンロード

まずはDocker HubからDockerイメージをダウンロードします。Docker Hubで公開されているDockerイメージは、自由にダウンロード、保存することができます。

$ docker pull ubuntu:18.04

Dockerコンテナのデプロイ

保存済みのDockerイメージを用いて、Dockerコンテナを立ち上げます。Dockerコンテナをデプロイする際、様々なオプションがあります[1][2]
今回使用するオプションは、-it--privileged--env--volume--nameです。
まず-itにより、Dockerコンテナに対して擬似端末(pseudo terminal)を割り当てることで、Dockerコンテナ上でBashを使用できるようにします。
続いて--privilegedにより、全てのデバイスに対するアクセスを許可します。
--envでは、Dockerコンテナ内で使用する環境変数を指定します。
--volumeでは、ホストOSのディレクトリをゲストOSにマウントすることができます[3]
--nameではコンテナ名を指定することができます。

$ docker run -it \
             --privileged \
             --env="DISPLAY=$DISPLAY" \
             --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
             --volume="$HOME/ws/:/home/" \
             --name="ubuntu_cv2" \
             ubuntu:18.04

パッケージのインストール

まずはUbuntuお決まりのアップデート、アップグレードです。

# apt-get update
# apt-get upgrade

続いて、エディタとしてVimをインストールしておきます。

# apt-get install vim

プログラミング言語にはPythonを使用します。

# apt-get install python3.6 \
                  python3-dev \
                  python3-pip \
                  libffi-dev \
                  libssl-dev

pipを使用してOpenCVをインストールします。

# pip3 install opencv-python

画像表示プログラムを作成

OpenCVを使用して画像を表示する基本的なプログラムを作成しておきます。

open_image.py
import cv2

# Load an color image
img = cv2.imread('test.jpg')

# Show the image
cv2.imshow('image',img)

# Stop when 0 pressed
cv2.waitKey(0)
cv2.destroyAllWindows()

トラブル1:OpenCVを正しくインポートできない

まずPythonを実行して、OpenCVが正しくインポートできるかテストしてみます。

# python3
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/dist-packages/cv2/__init__.py", line 3, in <module>
    from .cv2 import *
ImportError: libSM.so.6: cannot open shared object file: No such file or directory

案の定、エラーによりOpenCVをインポートできません。このエラーは、libsm6libxext6libxrender-devのインストール[4]により解決できます。

# apt-get install -y libsm6 libxext6 libxrender-dev

インストール後、もう一度OpenCVをインポートできるかテストしてみます。

# python3
>>> import cv2

OKですね!

トラブル2:画像を表示できない

先程作成したopen_image.pyを実行してみましょう。

# python3 open_image.py
No protocol specified
: cannot connect to X server :1

PCとのディスプレイ接続に失敗しているようです。ホストPC側で、ゲストPCからのホストPCディスプレイへの接続要求を拒否していることが理由でした。別のターミナルを開けて、ホストPC側で下記コマンドを実行すると、ディスプレイへの接続を許可[5][6][7]することができます。

$ xhost +
access control disabled, clients can connect from any host

再度Dockerコンテナを実行していたターミナルに戻り、open_image.pyを実行してみましょう。

# python3 open_image.py
X Error: BadAccess (attempt to access private resource denied) 10
  Extension:    130 (MIT-SHM)
  Minor opcode: 1 (X_ShmAttach)
  Resource id:  0x247
...

別のエラーが出てきました。エラー原因を調査したところ、環境変数にQT_X11_NO_MITSHM=1を追加することで解決できるそうです。まずは.bashrcファイルをVimで開きます。

# vim ~/.bashrc

続いて、環境変数QT_X11_NO_MITSHM=1を追記します。

export QT_X11_NO_MITSHM=1

.bashrcファイルを保存した後、環境変数の追加を反映させるため、sourceコマンド[8]を実行します。

# source ~/.bashrc

echoコマンドを使用して、環境変数が正しく追加されているか確認してみましょう。

# echo $QT_X11_NO_MITSHM
1

OKですね!三度目の正直です。open_image.pyを実行してみましょう!

# python3 open_image.py

画像が表示されました!!!

おわりに

様々なトラブルがありましたが、無事にDockerコンテナとPCディスプレイを接続して、OpenCVにより画像を表示させることができました。今回の検証より、Dockerコンテナをデプロイする際には、下記のように環境変数QT_X11_NO_MITSHM=1を追加しておくと良いことも分かりました。

$ docker run -it \
             --privileged \
             --env="DISPLAY=$DISPLAY" \
             --env="QT_X11_NO_MITSHM=1" \
             --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
             --volume="$HOME/ws/:/home/" \
             --name="ubuntu_cv2" \
             ubuntu:18.04

これからDockerマスターを目指して頑張っていこうと思います!
読んで頂いた方々、ありがとうございます!!!

参考文献

[1] Docker run options, https://docs.docker.com/v17.12/edge/engine/reference/commandline/run/
[2] Example of docker run, https://qiita.com/tnarihi/items/275c009e9dec1306893f
[3] How to mount on docker, https://docs.docker.com/v17.09/engine/admin/volumes/bind-mounts/
[4] How to solve opencv import error, https://github.com/NVIDIA/nvidia-docker/issues/864
[5] Open X server, https://unix.stackexchange.com/questions/121716/unable-to-open-x-server
[6] Allowing computers access, https://www.stitson.com/pub/book_html/node72.html
[7] About xhost, https://wiki.archlinux.jp/index.php/Xhost
[8] Source command, https://bash.cyberciti.biz/guide/Source_command

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker x 可視化がうまくいかずハマったのでまとめてみた!

はじめに

Docker上でOpenCV等のビジョン系ライブラリを使用する時は、DockerコンテナとローカルPCのディスプレイを接続する必要がありますが、この方法が分からず結構な時間を要してしまいましたので、途中で遭遇したトラブルとその解決策を含めてまとめていきたいと思います!

開発環境

Ubuntuです!詳細は下記コマンドでチェックしておきます!

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

$ arch
x86_64

Dockerイメージのダウンロード

まずはDocker HubからDockerイメージをダウンロードします。Docker Hubで公開されているDockerイメージは、自由にダウンロード、保存することができます。

$ docker pull ubuntu:18.04

Dockerコンテナのデプロイ

保存済みのDockerイメージを用いて、Dockerコンテナを立ち上げます。Dockerコンテナをデプロイする際、様々なオプションがあります[1][2]
今回使用するオプションは、-it--privileged--env--volume--nameです。
まず-itにより、Dockerコンテナに対して擬似端末(pseudo terminal)を割り当てることで、Dockerコンテナ上でBashを使用できるようにします。
続いて--privilegedにより、全てのデバイスに対するアクセスを許可します。
--envでは、Dockerコンテナ内で使用する環境変数を指定します。
--volumeでは、ホストOSのディレクトリをゲストOSにマウントすることができます[3]
--nameではコンテナ名を指定することができます。

$ docker run -it \
             --privileged \
             --env="DISPLAY=$DISPLAY" \
             --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
             --volume="$HOME/ws/:/home/" \
             --name="ubuntu_cv2" \
             ubuntu:18.04

パッケージのインストール

まずはUbuntuお決まりのアップデート、アップグレードです。

# apt-get update
# apt-get upgrade

続いて、エディタとしてVimをインストールしておきます。

# apt-get install vim

プログラミング言語にはPythonを使用します。

# apt-get install python3.6 \
                  python3-dev \
                  python3-pip \
                  libffi-dev \
                  libssl-dev

pipを使用してOpenCVをインストールします。

# pip3 install opencv-python

画像表示プログラムを作成

OpenCVを使用して画像を表示する基本的なプログラムを作成しておきます。

open_image.py
import cv2

# Load an color image
img = cv2.imread('test.jpg')

# Show the image
cv2.imshow('image',img)

# Stop when 0 pressed
cv2.waitKey(0)
cv2.destroyAllWindows()

トラブル1:OpenCVを正しくインポートできない

まずPythonを実行して、OpenCVが正しくインポートできるかテストしてみます。

# python3
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/dist-packages/cv2/__init__.py", line 3, in <module>
    from .cv2 import *
ImportError: libSM.so.6: cannot open shared object file: No such file or directory

案の定、エラーによりOpenCVをインポートできません。このエラーは、libsm6libxext6libxrender-devのインストール[4]により解決できます。

# apt-get install -y libsm6 libxext6 libxrender-dev

インストール後、もう一度OpenCVをインポートできるかテストしてみます。

# python3
>>> import cv2

OKですね!

トラブル2:画像を表示できない

先程作成したopen_image.pyを実行してみましょう。

# python3 open_image.py
No protocol specified
: cannot connect to X server :1

PCとのディスプレイ接続に失敗しているようです。ホストPC側で、ゲストPCからのホストPCディスプレイへの接続要求を拒否していることが理由でした。別のターミナルを開けて、ホストPC側で下記コマンドを実行すると、ディスプレイへの接続を許可[5][6][7]することができます。

$ xhost +
access control disabled, clients can connect from any host

再度Dockerコンテナを実行していたターミナルに戻り、open_image.pyを実行してみましょう。

# python3 open_image.py
X Error: BadAccess (attempt to access private resource denied) 10
  Extension:    130 (MIT-SHM)
  Minor opcode: 1 (X_ShmAttach)
  Resource id:  0x247
...

別のエラーが出てきました。エラー原因を調査したところ、環境変数にQT_X11_NO_MITSHM=1を追加することで解決できるそうです。まずは.bashrcファイルをVimで開きます。

# vim ~/.bashrc

続いて、環境変数QT_X11_NO_MITSHM=1を追記します。

export QT_X11_NO_MITSHM=1

.bashrcファイルを保存した後、環境変数の追加を反映させるため、sourceコマンド[8]を実行します。

# source ~/.bashrc

echoコマンドを使用して、環境変数が正しく追加されているか確認してみましょう。

# echo $QT_X11_NO_MITSHM
1

OKですね!三度目の正直です。open_image.pyを実行してみましょう!

# python3 open_image.py

画像が表示されました!!!

おわりに

様々なトラブルがありましたが、無事にDockerコンテナとPCディスプレイを接続して、OpenCVにより画像を表示させることができました。今回の検証より、Dockerコンテナをデプロイする際には、下記のように環境変数QT_X11_NO_MITSHM=1を追加しておくと良いことも分かりました。

$ docker run -it \
             --privileged \
             --env="DISPLAY=$DISPLAY" \
             --env="QT_X11_NO_MITSHM=1" \
             --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
             --volume="$HOME/ws/:/home/" \
             --name="ubuntu_cv2" \
             ubuntu:18.04

これからDockerマスターを目指して頑張っていこうと思います!
読んで頂いた方々、ありがとうございます!!!

参考文献

[1] Docker run options, https://docs.docker.com/v17.12/edge/engine/reference/commandline/run/
[2] Example of docker run, https://qiita.com/tnarihi/items/275c009e9dec1306893f
[3] How to mount on docker, https://docs.docker.com/v17.09/engine/admin/volumes/bind-mounts/
[4] How to solve opencv import error, https://github.com/NVIDIA/nvidia-docker/issues/864
[5] Open X server, https://unix.stackexchange.com/questions/121716/unable-to-open-x-server
[6] Allowing computers access, https://www.stitson.com/pub/book_html/node72.html
[7] About xhost, https://wiki.archlinux.jp/index.php/Xhost
[8] Source command, https://bash.cyberciti.biz/guide/Source_command

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Pclinuxos64-kde5 日本語設定

先に導入した Pclinuxos64-kde5-2019.11
日本語設定でちょっと苦労しました。

日本語キーボードが設定できない。
日本語入力 ibus が反映しない。
KTerm に 無理やりibus-qt4 をインストール
キーボード設定は こちらのコマンドで反映出来ました。

localectl set-keymap jp106

Screenshot_20200120_082646-.jpg

毎度のことですが日本語に苦労するわぁ・・・

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む