qshinoの日記

Powershell関係と徒然なこと

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では下記の流れ。

  1. stratx : /usr/bin/startx
  2. xinitrc : ~/.xinitrc or /etc/X11/xinit/xinitrc
  3. xserverrc : ~/, or /etc/X11/xinit/
  4. xsession : /etc/X11/Xsession
  5. 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

https://wiki.archlinux.jp/index.php/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4

マルチな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と命名されたと思われる。

f:id:qshino:20190613213809j:plain

xnest/xephyrの用途としては、

  1. xdmcp等のデスクトップ全体をウインドウ表示する。
  2. xプロトコルを中継する。

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

http://tenten909.blog.shinobi.jp/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E9%96%A2%E9%80%A3/xephyr%20%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89

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をインストール

https://www.google.com/url?sa=t&source=web&rct=j&url=https://qiita.com/asahi0301/items/3c287190348552f19415&ved=2ahUKEwi06dThyeHiAhUEPnAKHS1tA5cQFjAAegQIBhAC&usg=AOvVaw139oKYU2jK3wE7U_hETwGA

gstreamer対応opencv

gstreamer対応opencv

https://denor.jp/jetson-nano%e3%81%a7gstreamer%e3%81%8c%e6%9c%89%e5%8a%b9%e3%81%aaopencv%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b%e3%81%ab%e3%81%af-apt-src%e7%89%88

yolo

darknet yolo on nano

https://denor.jp/jetson-nano%E3%81%A7gpu%E3%81%A8opencv%E3%81%8C%E6%9C%89%E5%8A%B9%E3%81%AAyolo%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF

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

https://qiita.com/karaage0703/items/b14c249aa33112669ee4

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

https://qiita.com/asahi0301/items/3c287190348552f19415

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を使って起動する。

  1. 初期の起動シーケンス
  2. cboot
  3. uboot /boot/extlinux.conf読み込み
  4. 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の改造で起動ディスクの選択も可能かもしれない。

なお、起動に必要なものは、

  1. bootloader cbootまでのローダ
  2. cboot option cbo.dtb
  3. linux kernel/initrd/dtb
  4. rootfs

flash.shが何を何処に書き込んでいるか不明。1はemmcで良いが、2-4はdiskに書き込みたい。cboがロードするkernelをミニカーネルにし、ミニカーネルが動的に次段カーネルを選択すればよいのかも。

起動可能ディスク

起動可能ディスクは、TX1/2,Nanoの場合はubootにより、Xavierの場合はcbootによる。Xavierでは下記のディスクから起動できると言われている。

  1. emmc
  2. sd
  3. usb
  4. sata
  5. net: dhcp/tftp/nfs

Devkit 搭載のm.2 / Nvmeからの起動が入っていない。cbootにnvmeドライバがないのだろうか。PCIe slotにSSDを挿しての起動も同じく未対応。

Xavierのuboot未対応の理由は謎だが、課題は組み込み装置のJetsonにその様な機能が必要なのか。

或いは、先に出荷されたtx1/2、後に出荷されたnanoがuboot対応する一方、xavierがuboot対応しないことの意味は?

価格的にはXavierはNanoの10倍。位置づけが異なる。

  • Xavier $1,000, 512core, volta
  • TX2/8GB $400, 256core, pascal
  • TX2/4GB $300
  • Nano $100, 128core maxwell

補足

  • TX1, $400->$300, 256core, maxwell
  • TK1, EOL, 192core Kepler

TX1はTX2に統合されるとし、Jetsonとしては、Xavier, TX, Nanoの3シリーズ。今後も3シリーズを維持し続けるのか、或いは拡大/集約していくのか。

Xavierは自動運転等の高度な産業用途では重要なパーツであり、この分野ではまだまだ能力需要が高い。多数のベンチャーも生まれており、競争も激しい。どこかがエコシステムを勝ち取るまで競争が続く。但し、一般市場には出回らず、高度な産業用途が主戦場である。

一方、Nonoはロボットや監視等の程々の能力を安価に広く使いたい分野での需要が考えられる。また、nvidiaがエコシステムを拡大し、Xavierの領域でガリバーとなる為に裾野を広げる戦略領域でもある。

さて、TXの領域は中途半端であり、明確な需要が見えてこない。ラインナップと言う形で生き残るかもしれない。

参考

http://takesan.hatenablog.com/entry/2016/10/15/151649

ディープラーニング入門関係

ディープラーニングの入門関係

DL4U

https://weblab.t.u-tokyo.ac.jp/deep-learning%E5%9F%BA%E7%A4%8E%E8%AC%9B%E5%BA%A7%E6%BC%94%E7%BF%92%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84-%E5%85%AC%E9%96%8B%E3%83%9A%E3%83%BC%E3%82%B8/

松尾研究室

https://weblab.t.u-tokyo.ac.jp/deep-learningnew/

chainer

https://tutorials.chainer.org/ja/tutorial.html

Demo

Two days to a demo

https://developer.nvidia.com/embedded/twodaystoademo