X11色々
X11関係で徒然と。
テーマはXdmx, Xvnc, Xnest, VirtualGL, xrdp, rdesktopなど。
x11 転送関係
https://www.qoosky.io/techs/b71444ec83
複数のX11サーバを立ち上げる方法
一つのマシンに複数のコンソールを立ち上げる事は良くあること。立ち上げ後、CTRL-ALT-FunctionKeyでコンソールを切り替える。
一方、インストール直後は一台のマシンにX11サーバが一つ。コンソールの様にXも複数立ち上げられるか?
期待値は欲しい数だけXを立ち上げる事。Xの切り替えはコンソール同様に、C-ALT-FuncKeyだとやりやすい。
$ X :1 $ X :2 $ X :3
上記だと、上がったとしても、素のXサーバ。WindowManagerなども同時に起動したいなら、
$ startx -- :1 $ startx -- :2 $ startx -- :3
最近のXはディスプレイが無いと上がらない場合があり、その対策も必要かもしれない。
とりあえず、startxは複雑過ぎて上手く行かず、素のX で何とか立ち上がる。
ubuntu18.04 だと、2つ目のXのvtを指定しないと失敗した。また、root権限が必要とlogに出たのでsudo。立ち上がったのは、
- sudo X vt2 :1
しかし、Xが上がっただけでアプリもWMもいない。つまり、何もできない。:1用のWindowManagerを立上げ、適当にxterm等を上げて、C-A-F2 で:1のXに切り替わる。
startx では vt# を自動で検索してくれたり便利なのだが、動かないものは使えない。時間ができたら考える。
昔の仮想デスクトップのイメージ。
startx
さて、前項ではstartxのX起動中にfailしたため、startxの裏側を調査。
詳細はrefを参照して欲しいが簡単に。
全体の流れは個々のDistributionにより異なるがらUbuntuでは下記の流れ。
- stratx : /usr/bin/startx
- xinitrc : ~/.xinitrc or /etc/X11/xinit/xinitrc
- xserverrc : ~/, or /etc/X11/xinit/
- xsession : /etc/X11/Xsession
- session-mamager or window-mamager or terminal-emlator
とても深く、かつ、それぞれの段階で選択肢がある。また、OS毎に異なる。AIXの場合の始まりは、
startx [ -d Display:0 ] [ -t | -w ] [ -x Startup | [ -r Resources ] [ -m Window_Manager ] ] [ -wait ]
Xorgだと、
startx [ [ client ] options ... ] [ -- [ server ] options ... ]
https://www.x.org/releases/X11R6.9.0/doc/html/startx.1.html
以後はxorg版で。startx は色々な確認後、client用にxinitrcを探し、server用にxserverrc を探す。
個人用xinitrc, xserverrcがない場合、それぞれグローバルなものを使う。
xinitrc はxsession を起動するだけ。 xserverrcはXを起動するだけ。
xsessionは、/etc/X11/Xsession.d/配下のスクリプトを順に実行し、スクリプトがSM or WM or TEを起動する。
SMだった場合、SMがX とWMを起動する。
また、xinitのオプション形式は、
xinit [ [ client ] options ] [ -- [ server ] [ display ] options ]
これはstartxと全く同じ。機能もほぼ同様。実質的にxinitはstartxに置き換えられたと見るのが正しいのかもしれない。xinitはxorgが提供し、startxはデストリブューターが提供するという、提供元の違いと言う面もある。
ref
http://www.nslabs.jp/startx.rhtml
https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_71/com.ibm.aix.cmds5/startx.htm
Xのスクリーン
X では、ディスプレイをhost:display.screen で指定する。displayがディスプレイ=Xサーバ、screenがモニター番号を示す。
一つのXサーバで複数のスクリーンを持つことが出来る。xorg.conf にてスクリーンを割り当てる。
スクリーンが複数ある場合、DISPLAY変数が異なるため、通常はウインドウの移動等はできない。よって、複数のスクリーンを一つに見せる xinerama extensionやrandrがある。また、nvidiaにはtwinviewドライバがある。
詳細は下記ref参照。
ref
マルチなX、なんなんなん行くさん
https://sites.google.com/site/teyasn001/ubuntu-12-10/huan-jing-bian-shudisplay
xnest/ xephyr
xnest/xephyr 共に基本機能は同じ。xnestは収束の方向で、今後の利用にはxephyrが推奨されている。
機能は、別のXserver のウインドウとして新たなXサーバー画面を表示する。
Xの中にXがあると言うネスト構造から、xnestと命名されたと思われる。
xnest/xephyrの用途としては、
Xのデスクトップ表示はxdmcpプロトコルであり、これを表示できるのはXサーバである。
中継は、app - x1 - x2 - x3 の様にappの出力をXサーバを中継して転送する。Firewall 等の理由により直接通信できない環境で、遠隔画面の表示が可能となる。
起動のコマンドラインは下記の通り。
DISPLAY=<d1> Xephyr -display :<d2>
- d1 : ウインドウを表示するXサーバ
- d2 : 新たに立ち上げるXサーバ
d2 Xサーバで受けたXプロトコルをd1のウインドウに表示する。xapp - d2 - d1 の流れでイメージが転送される。
OpenGL拡張等への対応が課題。
ref
xdmx
複数のXサーバの画面を一つのXdmxサーバで表示する。
一言で言うと、リモートXサーバの乗っ取り。
2つのpc a,bが共にXサーバを起動している時、aでxdmxを立ち上げると、bのXサーバがaのセカンドモニタとなる。
例えば、下記のような立上げコマンドをa上で打つと、a/b2台のpcがaのモニタとなる。入力はaのkbd,mouseが使える。
xdmx -display a:0 -display b:0 +xinerama
下記のコマンドラインとコンフィグファイルを使うと、4台のpcの画面を一台のサーバで表示する事ができる。
$ Xdmx :1 -configfile xdmx.conf -config example2 +xinerama &
xdmx.conf virtual example2 { display PC01:0 1280x1024 @0x0; display PC02:0 1280x1024 @1280x0; display PC03:0 1280x1024 @0x1024; display PC04:0 1280x1024 @1280x1024; }
コマンドラインを見ると分かるが、xinerama拡張を利用する。
通信における暗号化等のセキュリティについては詳細不明。
xdmxサーバを親、個別のXサーバを子と呼ぶと、参考例では、子から下記のsshで親に入りxdmxを立上げていた。
子$ ssh -X -c blowfish-cbc 親 親$ env|grep DISP 親$ xdmx :10 -display :0 -display 前のコマンド出力 -input 前のコマンド出力
上記は子のキーボードを使用する。親のキーボードを使用する場合は、-input :0とする。
ref
man xdmx
http://dmx.sourceforge.net/Xdmx.html#toc
https://www.atmarkit.co.jp/flinux/rensai/linuxtips/844xdmxsetting.html
http://etc2myday.jugem.jp/?eid=76
若き日の過ち
http://hakurei-shain.blogspot.com/2009/03/?m=1
intellilinx / How to share a window across multiple computers using Xorg
https://web.archive.org/web/20110225150836/http://intellilinux.info/node/25
xrandr
xinerama拡張を使ったxdmxと同様なXサーバ。
wikipediaによると、「XRandR(エックス・アール・アンド・アール)は、X Window System を再起動せずに解像度の変更や、画面の回転、表示モニターの切替え、マルチモニターの設定など、を行うことを容易にするライブラリとコマンドである。XRandRは、X Window System Resize and Rotate Extension を略したもの。」
コマンド
コマンドの使用例編集 モニターと可能な設定の表示 xrandr 全てのモニターを最高解像度で、同じ画面を表示する。 xrandr --auto 内蔵モニターの右側に外部モニターを表示。モニターの名前は、上の xrandr で調べられる。ここでは 内部モニター:LVDS、外部モニター:VGA とする。 xrandr --output VGA --right-of LVDS 内蔵モニターの上側に外部モニターを表示。 xrandr --output VGA --above LVDS マルチモニターを使用する場合、X11の設定ファイル:通常 /etc/X11/xorg.conf で、仮想スクリーンの範囲を大きく取っておく。 例: Virtual 2048 2048
ref
https://ja.m.wikipedia.org/wiki/XRandR
https://keithp.com/~keithp/talks/randr/
xvnc
その他
いつか。
ref
x11 サーバ複数起動
http://memolinux.blogspot.com/2009/06/xorg.html?m=1
Xdmx
https://www.atmarkit.co.jp/flinux/rensai/linuxtips/836usedmx.html
Jetson Nano Tips
Jetson Nano Tips
Nano関係のTipsを集め中。
Nano GPIO Library
https://github.com/NVIDIA/jetson-gpio
Nano resources
https://devtalk.nvidia.com/default/topic/1048642/links-to-jetson-nano-resources-amp-wiki/
Nano で OpenPose
http://www.neko.ne.jp/~freewing/raspberry_pi/nvidia_jetson_nano_build_openpose/
nvpmodel
- nvpmodel -q : 現在のモード -m x : モードをx : 0/max, 1/5w
- jetson_clocks -show : 表示
- jetson_clocks : 設定
avahi/mdns
dhcp運用の場合、毎回ipが変わり探すのが大変なので、ホスト名.localでアクセスできる様にmdnsを導入。
sudo apt install avahi-daemon
vnc
ちょっと設定が必要。vinoのschemaを変更する手もあるらしいが、下記ではaptで再導入。
sudo apt install vino gsettings set org.gnome.Vino prompt.enabled false gsettings set org.gnome.Vino require-encryptsion false # uuidを調べる nmcli connection show # 調べたuuidを下記で設定。 dconf write /org/gnome/settings-daemon/plugins/sharing/vino-server/enabled-connections "['<有効にするネットワークのUUID>']" # vncサーバ起動 export DISPLAY=:0 /usr/lib/vino/vino-server # vncクライアントからport 5900/tcpで接続。
vncpasswd設定、firewall設定、ブート時の自動起動は別途。loginしないとvino-severが上がらないらしい。ここでのloginがgdmログインか、cliのログインを含むのか。
nvgstcaptureではカメラ映像が表示されないらしい。
一方、imagenet-cameraは表示される。
表示条件は謎。
参考
https://denor.jp/jetson-nano開発者キットにvnc接続するには-vino版
Tensorflow
$ sudo apt-get install python3-pip libhdf5-serial-dev hdf5-tools $ pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.13.1+nv19.5 --user
tensorflow tutorial
https://www.tensorflow.org/tutorials
参考
https://devtalk.nvidia.com/default/topic/1048776/jetson-nano/official-tensorflow-for-jetson-nano-/
PyTorch
$ wget https://nvidia.box.com/shared/static/j2dn48btaxosqp0zremqqm8pjelriyvs.whl -O torch-1.1.0-cp36-cp36m-linux_aarch64.whl $ pip3 install numpy torch-1.1.0-cp36-cp36m-linux_aarch64.whl
keras
keras をインストールできないと思っていたら、ツワモノが。
http://thr3a.hatenablog.com/entry/20190517/1558102125
cythonを入れると、行ける?
参考
https://devtalk.nvidia.com/default/topic/1049071/pytorch-for-jetson-nano/
OpenCV 4.1
Jetson Nano にOpenCV4.1をインストール
gstreamer対応opencv
gstreamer対応opencv
yolo
darknet yolo on nano
darknet yolo
みんなdarknet yolo
https://toramamma.blogspot.com/2019/04/jetson-nano-darknet.html?m=1
Alexey さんのDarknet
Cloud AI?
見るだけで面白い。
http://takesan.hatenablog.com/entry/2019/04/09/001852
StyleGAN
存在しない人の顔を作成。
https://qiita.com/karaage0703/items/f78b04ab952ee7264f9b
その他
おいおい
ref
itmedia コラム
https://pc.watch.impress.co.jp/docs/column/nishikawa/1189/355/amp.index.html
karaageさんNano tips
https://qiita.com/karaage0703/items/b14c249aa33112669ee4
karaageさん1st impression https://karaage.hatenadiary.jp/entry/2019/04/29/073000
bash 色々
変数展開
https://qiita.com/t_nakayama0714/items/80b4c94de43643f4be51
最後のredさんのコメントも素敵〜。
これは非常に参考になる。Bash変数展開のリファレンス記事。
Bashのバージョンは 4.3.48
気になった
{5..8}の様な展開は、最後のワンライナーのみ。変数展開とは違うから、範囲外ではある。
for char in {A..Z} ; do vars=($(eval echo \$\{\!${char}*\})) ; echo "${char}: (${#vars[*]}) ${vars[*]}" ; done
ref
StyleGAN on nano
StyleGAN on nano
からあげさんのStyleGANを使う。
$ git clone https://github.com/karaage0703/stylegan
$ cd stylegan
$ python3 pretrained_example.py
ref
Nano for styleGAN
https://qiita.com/karaage0703/items/f78b04ab952ee7264f9b
StyleGAN
https://github.com/NVlabs/stylegan
Nano tips
swapfile 作成
swap file 作成
jetson nano でのswap fileを作成する。
code
$ fallocate -l 4G swapfile $ chmod 600 swapfile $ mkswap swapfile $ sudo swapon swapfile $ swapon -s # swap file will be shown
メモリ不足の際は上記にてswapファイルを作成する。
性能を考慮し、できるだけ高速なデバイスにswap fileを作成する。
ref
Jetson TX1 Xavier Nano SD/usb boot
Jetson TX1/Xavier/Nano SD boot
ext4 フォーマットのsdカードにrootfsをコピーした後に、emmcの/boot/extlinux.confを書き換える。
xavierでは使えないので注意。
起動シーケンス
TX1の起動シーケンスは、下記の通り。3. ubootまではemmc上で動作し、extlunux.confが指定するkernel, initrd, dtb, rootfsを使って起動する。
- 初期の起動シーケンス
- cboot
- uboot /boot/extlinux.conf読み込み
- linux
Nano
Nano では標準でSD bootであるが、それをusb flash bootに変更する際も同様である。
起動シーケンスのubootまではSDで行われる。
Xavier
xavier ではubootがなく、cbootからのlinux起動のため、extlinux.confを読み込めず、本手順の期待どおりに動作しない。
xavier でのsd bootには、cbootオプションを書き換える事になる。
flash.shにより、flashにcbootオプションを書き込めばsd bootも可能と言える。
例えば、rootfsを/dev/sda2に作成後、
- flash.sh jetson-xavier /dev/sda2
但し、flash.shでは上記の通り、起動ディスクを一つしか指定できず固定である。起動時にディスクを動的に選択できない。
cbootに起動ディスクの選択機能があれば、flash.shの改造で起動ディスクの選択も可能かもしれない。
なお、起動に必要なものは、
flash.shが何を何処に書き込んでいるか不明。1はemmcで良いが、2-4はdiskに書き込みたい。cboがロードするkernelをミニカーネルにし、ミニカーネルが動的に次段カーネルを選択すればよいのかも。
起動可能ディスク
起動可能ディスクは、TX1/2,Nanoの場合はubootにより、Xavierの場合はcbootによる。Xavierでは下記のディスクから起動できると言われている。
Devkit 搭載のm.2 / Nvmeからの起動が入っていない。cbootにnvmeドライバがないのだろうか。PCIe slotにSSDを挿しての起動も同じく未対応。
Xavierのuboot未対応の理由は謎だが、課題は組み込み装置のJetsonにその様な機能が必要なのか。
或いは、先に出荷されたtx1/2、後に出荷されたnanoがuboot対応する一方、xavierがuboot対応しないことの意味は?
価格的にはXavierはNanoの10倍。位置づけが異なる。
補足
- TX1, $400->$300, 256core, maxwell
- TK1, EOL, 192core Kepler
TX1はTX2に統合されるとし、Jetsonとしては、Xavier, TX, Nanoの3シリーズ。今後も3シリーズを維持し続けるのか、或いは拡大/集約していくのか。
Xavierは自動運転等の高度な産業用途では重要なパーツであり、この分野ではまだまだ能力需要が高い。多数のベンチャーも生まれており、競争も激しい。どこかがエコシステムを勝ち取るまで競争が続く。但し、一般市場には出回らず、高度な産業用途が主戦場である。
一方、Nonoはロボットや監視等の程々の能力を安価に広く使いたい分野での需要が考えられる。また、nvidiaがエコシステムを拡大し、Xavierの領域でガリバーとなる為に裾野を広げる戦略領域でもある。
さて、TXの領域は中途半端であり、明確な需要が見えてこない。ラインナップと言う形で生き残るかもしれない。
参考
ディープラーニング入門関係
ディープラーニングの入門関係
DL4U
松尾研究室
https://weblab.t.u-tokyo.ac.jp/deep-learningnew/
chainer
https://tutorials.chainer.org/ja/tutorial.html
Demo
Two days to a demo