gnome in ubuntu16.04

使用開始10分くらいのメモです。

Unityデスクトップを使っていると、CUDA導入時に入るNVIDIAドライバで、サスペンド復帰後にウィンドウ周辺にノイズが出るため、Gnomeへの移行を試しました。
この主目的であるサスペンド復帰後にウィンドウ周囲にノイズが出ない、はGnomeでバッチリでした。

Gnome、わたしの環境ではウィンドウの四隅の上の丸みのところが透過にならず白塗りで表示されるのが微妙な感じです。

サスペンドが見つからない


ALTキーを押すとサスペンドボタンになる。
https://ubuntuforums.org/showthread.php?t=2212872
こんなの説明されなければ絶対に見つからない。





フォーマットを変えて日付等を表示したい

Click on Time at top center of display; Edit; Preferences; Display;
なんて設定欄は、ぱっと見、見つからない。

下記コマンドで用が足りる
gsettings set org.gnome.desktop.interface clock-show-date true
 この標準フォーマットが気に入らなかった場合は大変そう。
https://askubuntu.com/questions/312138/how-do-i-change-the-date-format-in-gnome-3-shell




 スクリーンショットを取るとファイルに直行する。

Unityは「クリップボードにコピー」 を選べるセーブダイアログが出ていた気がするが、ユーザ設定だったかもしれない。
まあ不便というわけでなく、慣れたらこちらのほうがよいかもしれないのでしばらくそのままにする。



以上です。

History of Install CUDA8.0 in Ubuntu16.04-amd64 LTS


http://blog.michinari-nukazawa.com/2017/04/install-cuda80-in-ubuntu1604-amd64-lts.html
の続き。

Web上のCUDA8.0インストール情報、たぶん記憶のママで書いているものが多いのでは。
なのでhistoryを公開します。
無駄なものが滅茶苦茶入っていますし、万が一historyから何か抜けてたら無意味ですが、まあ記憶で書いてる情報よりはマシだと思います。

```
   955  2017-04-20 23:00:17 vim ~/.bashrc
  956  2017-04-20 22:36:19 virtualbox &
  957  2017-04-20 22:38:14 sudo apt-get update && sudo apt-get dist-upgrade -y
  958  2017-04-20 22:47:37 sudo apt install linux-generic
  959  2017-04-20 22:58:06 sudo dpkg -i Downloads/cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
  960  2017-04-20 22:58:36 sudo apt-get update && sudo apt-get dist-upgrade -y
  961  2017-04-20 22:58:54 sudo apt-get install cuda
  962  2017-04-20 23:10:25 cuda-install-samples-8.0.sh cuda
  963  2017-04-20 23:10:28 ls
  964  2017-04-20 23:10:32 cd cuda/
  965  2017-04-20 23:10:38 cd NVIDIA_CUDA-8.0_Samples/
  966  2017-04-20 23:10:51 cat /proc/driver/nvidia/version
  967  2017-04-20 23:11:04 make
  968  2017-04-20 23:18:05 sudo apt-get install freeglut3-dev
  969  2017-04-20 23:18:10 make
  970  2017-04-20 23:19:39 sudo apt-get install mesa-common-dev
  971  2017-04-20 23:20:02 ls bin/
  972  2017-04-20 23:20:03 ls bin/x86_64/
  973  2017-04-20 23:20:05 ls bin/x86_64/linux/
  974  2017-04-20 23:20:06 ls bin/x86_64/linux/release/
  975  2017-04-20 23:20:08 ls bin/x86_64/linux/release/deviceQuery
  976  2017-04-20 23:20:10 bin/x86_64/linux/release/deviceQuery
  977  2017-04-20 23:21:23 find / -name libnvcuvid.*
  978  2017-04-20 23:21:31 ls /usr/local
  979  2017-04-20 23:21:37 ls /usr/local/cuda
  980  2017-04-20 23:21:46 ls /usr/local/cuda/bin/
  981  2017-04-20 23:21:54 env
  982  2017-04-20 23:22:01 env | grep PATH
  983  2017-04-20 23:22:30 ls /usr/local/cuda-8.0/lib64
  984  2017-04-20 23:27:04 make
  985  2017-04-20 23:28:29 ls /usr/local
  986  2017-04-20 23:28:31 ls /usr/lib
  987  2017-04-20 23:28:44 ls /usr/lib/nvidia
  988  2017-04-20 23:28:48 ls /usr/lib/nvidia-375
  989  2017-04-20 23:29:35 vim ~/.bashrc
  990  2017-04-20 23:30:52 source ~/.bashrc
  991  2017-04-20 23:30:55 make
  992  2017-04-20 23:32:00 vim ~/.bashrc
  993  2017-04-20 23:37:07 cd cuda/NVIDIA_CUDA-8.0_Samples/
  994  2017-04-20 23:37:09 make
  995  2017-04-20 23:37:51 vim ~/.bashrc
  996  2017-04-20 23:38:00 source ~/.bashrc
  997  2017-04-20 23:38:02 make
  998  2017-04-21 19:40:40 exit
  999  2017-04-21 21:01:41 gedit .bashrc
 1000  2017-04-21 21:45:50 history | less
 1001  2017-04-21 21:50:58 history > hits.txt


```

なお~/.bashrc追記内容。
```
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}

export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}


export LD_LIBRARY_PATH=/usr/lib/nvidia-375:${LD_LIBRARY_PATH}
export LIBRARY_PATH=/usr/lib/nvidia-375:${LIBRARY_PATH}

```
以上です。

Install CUDA8.0 in Ubuntu16.04-amd64 LTS

Web上にはなぜか、曖昧か不正確な情報ばかり載っています。なので本記事も、不正確な情報をひとつ増やしてもgoogle検索のノイズは大して増えないよなと思って雑に書いています。

なお手順は実機へのインストールです。



ところでCUDA7.5でcuDNNは別途インストールが必要って話だけれどCUDA8.0ではどうなの?
(まだ必要になってないので調べてない)

多くの場合には、本ブログ記事のように、記憶からいい加減に再現しているためだと思います。
とはいえ、他の理由も考えられます。
- 環境ごとにインストール済みアプリケーションがかなり違う。NVIDIAのLinux版プロプライエタリドライバとか、最近のデスクトップでは不要だし入れないほうが運用も楽だと思うのだけれど、何故必要だったのか知らないけれど既に入れてあったり。gcc入ってない環境とか何やってたんだ感があるけれど、きっとRubyOnRailsアプリを書いていたのだろう。
-  逆に不要なものを入れるように手順に指示がある場合も有る。mesaとかxorg-edgeとか、linux-kernel-gnericとか、その他グラフィックライブラリらしきものとか。私の手順では不要だったのだが、もう入っていたというだけ?
- 今はインストール先が実機以外にいろいろある。 それらによって手順が違う。
- 昔の知識のまんま。上記ライブラリは既にいらないし、今のCUDA8.0は、GDI/XWindowを落とさなくても普通にインストールできる。(たぶんパッケージ版の手順では依存関係が自動で解決されている)
- っていうかインストールの検証してないけれど、あなた達らほんとにそれCUDA導入に成功してるの? (わたしは面倒なので雑にしかしてない)
多くの人たちでそれぞれ手順が違うのは、多分そんな理由。
べつ「CUDAもインストールできないお前らにはまだTenserFlowは早すぎる」とか言って初心者を妨害しているわけではないと思う。

CUDAのインストール方法で、一番正確な情報は、(当然もちろんこのブログ記事ではなく)NVIDIAの公式なCUDAインストールガイドです。
CUDA公式のインストーラーのダウンロードページからリンクもあるので手に入れましょう。
https://developer.nvidia.com/cuda-downloads
CUDA_Installation_Guide_Linux.pdf です。
Qiitaの日本語記事とかはいい加減なことしか書いてないように見えるし統一見解が無いので参考にとどめて、書いてある通りに作業するのはやめましょう。
これももう数年前の記憶で今はどうかわからなくて申し訳ないですが、LinuxのNVIDIAドライバはとても繊細な子です。CUDAインストーラはそれに輪をかけて繊細な子です。インストールの順番を間違えると、OSのGUIが上がってこなくなったり、CUDAが動かなかったりして、OSから再インストールする羽目になります。
公式ドキュメントによると、Ubuntu向けのインストール方法が2つあります(.debと.run)。これもインストール方法ブログ記事乱立&混乱の理由かと思いますが、まあNVIDIAの気持ちを察しましょう。
私はdebパッケージ版をインストールしました。インストール手順は上記の公式ドキュメントの通りにしました。
動作確認も公式ドキュメントの通りにしましょう。具体的には付属サンプルをmakeしてdeviceQuery呼び出しです。
なお、ここだけ公式ドキュメントに足りていない箇所があって、幾つかの必要パッケージが足りないのと、LD_LIBRARY_DIR等の環境変数を追加する作業が記載されていません。


環境変数は、公式ドキュメントに記載されている下記のほかに、
```
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}

export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
```
以下を足すと私の環境で上手く行きました。
```
export LD_LIBRARY_PATH=/usr/lib/nvidia-375:${LD_LIBRARY_PATH}
export LIBRARY_PATH=/usr/lib/nvidia-375:${LIBRARY_PATH}

``` 
この設定、Web上では /etc/environment に入れろと書いてあります。開発環境の全ユーザに適用するならそれで正しいです。たぶんこちらのほうが良いのでしょう。
私はユーザごとに設定すべきかと考えて、 ~/.bashrc に設定しています。

```
/usr/bin/ld: cannot find -lnvcuvid
```

-lnvcuvid の不足がこれで解決できます。

あと、glutあたりが足りないと言われます。freeglut3-dev は必要です。
これは apt-get install freeglut3-dev で解決します。

mesaも必要らしいです。
sudo apt-get install mesa-common-dev

以上です。



インストール時のbashのhistoryを公開しました。
History of Install CUDA8.0 in Ubuntu16.04-amd64 LTS


Gtk3のキーリストとキーボードショートカットの多重設定

Gtk3のキーリストとキーボードショートカットの多重設定

ベクター・グラフィックス・エディタ Vecterionのコーディング作業中に得た知見です。

1. Gtkのキーリストはソースコードを参照。Webからも見れる。
2. Gtkのキーボードショートカットは別のキーで同じ関数を呼び出す設定ができる。






# 事の発端

Plus(+),Minus(-)KeyはキーボードとTenKeyの両方にあるが、キーコードが異なるためGtk内部では別のキーとして扱っている。
Vecterionではこれらを区別しないで、両方のキーに同じアクセラレータ(GtkのMenu連動キーボード・ショートカット機能)を紐付けたい。


# GTKキーボード定数値一覧

GTK(GDK)のキーボード定数と定数値の一覧は以下
//! key list: https://git.gnome.org/browse/gtk+/plain/gdk/gdkkeysyms.h


## キーボード定数値を検索する方法

アプリケーションでGtkコールバックのkeyvalを取得し、実際に押下して16進数値でデバッグ出力して上記の一覧を検索するとよいです。

```
debug: _cb_key_press()[98]: keyval=0x002b status=0x0005
debug: slot_et_etaion_from_key_action()[270]: no use:43

debug: _cb_key_press()[98]: keyval=0xffab status=0x0000
debug: slot_et_etaion_from_key_action()[270]: no use:65451
```

# 2重のキーボード・ショートカット

TenKeyとキーボードのPlus(+),Minus(-)Keyは内部的には別のキーですが、両方のキーにそれぞれ、同じ関数を呼ぶショートカットを設定してやると、ユーザは両方とも同じキーとして扱えるので混乱しないと思います。

```
1846 ¬
1847 static GtkWidget *_pv_get_menuitem_new_tree_of_view_zoom(GtkAccelGroup *accel_group)¬
1848 {¬
1849 >-------GtkWidget *menuitem_root;¬
1850 >-------GtkWidget *menuitem;¬
1851 >-------GtkWidget *menu;¬
1852 ¬
1853 >-------menuitem_root = gtk_menu_item_new_with_label ("_Zoom");¬
1854 >-------gtk_menu_item_set_use_underline (GTK_MENU_ITEM (menuitem_root), TRUE);¬
1855 ¬
1856 >-------menu = gtk_menu_new ();¬
1857 >-------gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_root), menu);¬
1858 ¬
1859 >-------// ** Accel to "/_View/_Zoom/Zoom _In (Ctrl++)"¬
1860 >-------menuitem = gtk_menu_item_new_with_label ("Zoom _In");¬
1861 >-------gtk_menu_item_set_use_underline (GTK_MENU_ITEM (menuitem), TRUE);¬
1862 >-------gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);¬
1863 >-------g_signal_connect(menuitem, "activate", G_CALLBACK(_cb_menu_view_zoom_in), NULL);¬
1864 >-------gtk_widget_add_accelerator (menuitem, "activate", accel_group,¬
1865 >------->------->-------GDK_KEY_plus, (GDK_CONTROL_MASK), GTK_ACCEL_VISIBLE);¬
1866 >-------gtk_widget_add_accelerator (menuitem, "activate", accel_group,¬
1867 >------->------->-------GDK_KEY_KP_Add, (GDK_CONTROL_MASK), GTK_ACCEL_VISIBLE); // in ten key.¬
1868 ¬
1869 >-------// ** Accel to "/_View/_Zoom/Zoom _Out (Ctrl+-)"¬
1870 >-------menuitem = gtk_menu_item_new_with_label ("Zoom _Out");¬
1871 >-------gtk_menu_item_set_use_underline (GTK_MENU_ITEM (menuitem), TRUE);¬
1872 >-------gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);¬
1873 >-------g_signal_connect(menuitem, "activate", G_CALLBACK(_cb_menu_view_zoom_out), NULL);¬
1874 >-------gtk_widget_add_accelerator (menuitem, "activate", accel_group,¬
1875 >------->------->-------GDK_KEY_minus, (GDK_CONTROL_MASK), GTK_ACCEL_VISIBLE);¬
1876 >-------gtk_widget_add_accelerator (menuitem, "activate", accel_group,¬
1877 >------->------->-------GDK_KEY_KP_Subtract, (GDK_CONTROL_MASK), GTK_ACCEL_VISIBLE); // in ten key.¬
1878 ¬
1879 >-------return menuitem_root;¬
1880 }¬
1881 ¬
```

win64アプリケーションクロスビルドでアイコン・プロパティ・リソースを付ける

Gtk3/Cで書いたベクターグラフィック・エディタのvecterionを、Ubuntu16.04ホストでwin64ターゲットにクロスビルド中。でアイコン・プロパティ・リソースを付けた作業のメモです。


以下のようなコードで実現できます。

# .rcほか、リソースファイルを用意する 

実際に必要なのは```IDI_ICON ICON ~```行だけです。
そのICONこれも実は文字列"ICON"とファイルパス以外は大した意味はないとか、他にもオプションが付けられるとかあるようです。
Win32アプリケーションプログラミングをマスターしたいわけではないので.rcファイルの記述はスルー。
.icoファイルですが、GIMPでいい加減に縮小するだけならいい加減に作れます。PNG透過の正方形画像を、512px, 64px,32px,16pxの順にレイヤ複製->レイヤ縮小を繰り返して、最後に.icoで保存しようとすると、アイコン形式画像を保存するウィザードが出てきてGIMPが良いようにしてくれます。
(64pxは48pxのほうがいいかもしれないけれどしていません。512pxもMacOSX対応にしては中途半端。)


Ubuntu16.04環境ではnautilusもeogもこの.icoを正しく描画できませんでしたが、Windowsではとしてはきちんとアプリケーションアイコンとして表示されたので問題ありません。

```
diff --git a/deploy/win/vecterion.rc b/deploy/win/vecterion.rc
new file mode 100644
index 0000000..ed229c3
--- /dev/null
+++ b/deploy/win/vecterion.rc
@@ -0,0 +1,24 @@
+#include <windows.h>
+
+//ICON
+IDI_ICON1 ICON DISCARDABLE "deploy/win/vecterion_icon.ico"
+
+1 VERSIONINFO
+FILEVERSION     0,0,0,1
+PRODUCTVERSION  0,0,0,1
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "080904E4"
+        BEGIN
+            VALUE "InternalName",        "vecterion_vge"
+            VALUE "OriginalFilename",     "vecterion_vge.exe"
+            VALUE "ProductName",        "vecterion_vge"
+            VALUE "ProductVersion",        "0.0.0.1"
+            VALUE "FileVersion",        "0.0.0.1"
+            VALUE "CompanyName",        "project daisy bell"
+            VALUE "LegalCopyright",        "Michinari.Nukazawa"
+            VALUE "FileDescription", "Vecterion, the true vector graphics editor for linux (and other)."
+        END
+    END
+END
diff --git a/deploy/win/vecterion_icon.ico b/deploy/win/vecterion_icon.ico
new file mode 100644
index 0000000..bf8ade4
Binary files /dev/null and b/deploy/win/vecterion_icon.ico differ
diff --git a/deploy/win/vecterion_icon.xcf b/deploy/win/vecterion_icon.xcf
new file mode 100644
index 0000000..7ba9088
Binary files /dev/null and b/deploy/win/vecterion_icon.xcf differ

```

# Windowsリソースのオブジェクト作成します。

クロスビルドはbashスクリプトにしています。

ここでリソース(.rc テキストのソース)をwindresでオブジェクトに変換します。
Makefileに入れるより楽そうで、やってみると、ビルド時間にほぼ影響がなかったので。
```
+# make resource(icon and other)
+TARGET_ARCH_WIN_RESOURCE=${OBJECT_DIR}/vecterion.res
+x86_64-w64-mingw32-windres ${ROOT_DIR}/deploy/win/vecterion.rc -O coff -o ${TARGET_ARCH_WIN_RESOURCE}
+


 # build app source
 CFLAGS_APPEND=-Wno-missing-include-dirs

 [ -d ${GTK3LIBRARY_DIR}/lib/pkgconfig ]
 export PKG_CONFIG_PATH=${GTK3LIBRARY_DIR}/lib/pkgconfig
-make TARGET_ARCH=win CC=x86_64-w64-mingw32-gcc CFLAGS_APPEND=${CFLAGS_APPEND} INCLUDE_APPEND="-mwindows"
+make TARGET_ARCH=win CC=x86_64-w64-mingw32-gcc CFLAGS_APPEND=${CFLAGS_APPEND} INCLUDE_APPEND="-mwindows" TARGET_ARCH_WIN_RESOURCE=${TARGET_ARCH_WIN_RESOURCE}

```



# リソースのオブジェクトをリンクします。

Windowsクロスビルド以外ではリソースのオブジェクトのパスを空文字にします。```
diff --git a/Makefile b/Makefile
index 4f859f1..0aa22f9 100644
--- a/Makefile
+++ b/Makefile
@@ -71,6 +71,7 @@ $(APP_FILE) : $(OBJECTS)
     $(CC) \
         $^ \
         $(OBJECT_DIR)/version.c \
+        $(TARGET_ARCH_WIN_RESOURCE) \
         $(CFLAGS) \
         $(INCLUDE) \
         -o $(APP_FILE)


```



ComfyUIでXYZ-PlotするワークフローのサンプルとTips(ComfyUI-XYZ-Stitch)

 ComfyUIでAutomatic1111的なXY-Plotをしたいのだが、ComfyUIデフォルト機能には用意されていない。     カスタムノードが必要となるのだが、Webには古いとか何故か動かないとかなXY-Plotパッケージの使ってみた系記事か、githubに上げられた...