grbl1.1+Arduino CNCシールドV3.5+bCNCを使用中。
BluetoothモジュールおよびbCNCのPendant機能でスマホからもワイヤレス操作可能。
その他、電子工作・プログラミング、機械学習などもやっています。
MacとUbuntuを使用。

CNCマシン全般について:
国内レーザー加工機と中国製レーザー加工機の比較
中国製レーザーダイオードについて
CNCミリングマシンとCNCルーターマシンいろいろ
その他:
利用例や付加機能など:
CNCルーター関係:



*CNCマシンの制作記録は2016/04/10〜の投稿に書いてあります。


2018年5月31日木曜日

Ubuntu 18.04: Gnome-Shell-Extensionsでターミナル起動+Anaconda仮想環境に入る

Ubuntu 18.04のカスタマイズのついでに、自作Gnome Shell Extensionsにチャレンジ。ネットを探してもあまりサンプル例がなく、最初はこちらを参考にしました。


今回つくろうとしたもの:

・トップバーにアイコン(下画像:左から3個目のアイコン)をつける
・アイコンをクリックすると、Anacondaの仮想環境に入った状態でターミナル起動

というものです。


Anacondaの仮想環境を使っているため、通常はターミナルを立ち上げて、

source activate py36

を打ち込んで仮想環境に入りますが、この部分をワンクリックでできないかというものです。設定した「py36」という仮想環境には、機械学習用にTensorfowやPytorchなどのライブラリが入っています。


「source activate py36」のシェルスクリプト:
まず、仮想環境に入るためのコマンドである「source activate py36」を記入する「py36.sh」ファイルをつくります。そのまま「source activate py36」を実行させればいいというわけではなく(やってみたら失敗)、こちらを参考にしました。「source 〜」の場合は以下のようにやるといいようです。
追記:その後「conda activate py36」へ変更しました(こちらへ)。

・「py36.sh」ファイルをつくる(場所は問わず)。

・「py36.sh」の中に、以下の2行を書いて保存。

eval '$BASH_POST_RC'
BASH_POST_RC='source activate py36' gnome-terminal

・「py36.sh」を実行可能にするために、ファイルを右クリックで「プロパティ>アクセス権>プログラムとして実行可能」にチェック(「chmod +x py36.sh」でも可)。



・「.bashrc」ファイル末尾のほうに

eval "$BASH_POST_RC"

を書き込んでおく。以上。

・「py36.sh」ファイルをダブルクリックすれば先程の画像のように仮想環境に入った状態で起動するはず。そのままランチャーにしてもいいし、desktopファイルと連携してもいいと思います。

そのままコマンドを書いただけだと実行したらターミナルは終了となってしまうので、今回のようにターミナルが起動する直前に「eval」を使って「.bashrc」からコマンドを実行させると大丈夫なようです。
あとは、このシェルスクリプトを実行させるGnome Shell Extensionsをつくります。

screenを使った場合(おまけ:その1):
「eval」の方法が分からず「screen」で仮想環境をつくって試したこともありました。
以下のスクリプトをランチャーのようにダブルクリックで起動させると、screenで仮想環境のなかのAnacondaの仮想環境の中に入った状態でターミナルが起動します。

#!/bin/bash

#まず外部からscreen仮想環境をつくる
screen -dmS sc1

#外部から、そのscreen仮想環境にAnaconda仮想環境をつくる
screen -S sc1 -X stuff 'source ~/.pyenv/versions/anaconda3-5.1.0/bin/activate py36'`echo -ne '\015'`

#最後にその二重の仮想環境に入る
gnome-terminal -e 'screen -x'

一応大丈夫なのですが、消し忘れるとすっど動いているということと、ここまで無理する必要もないかと、ようやく今回の方法に至りました。screenの勉強にはなったのでいずれ何かに使えればと。
尚、「sudo apt-get install screen」でインストール。

xdotoolを使った場合(おまけ:その2):
キー入力を自動化してくれる「xdotool」というのがあり、そのまま今回の「source activate py36(リターン)」を打ち込ませるスクリプトを書くだけ。

#!/bin/bash

#まずターミナル起動
gnome-terminal

#ターミナルが開くまで1秒ディレイ
sleep 1s

#仮想環境に入るコマンド
xdotool type 'source activate py36'

#最後にリターンキー入力
xdotool key Return

「py36.sh」などと保存し、右クリックで「プロパティ>アクセス権>プログラムとして実行可能」にチェック。ダブルクリックすればターミナルを起動しコマンドを実行してくれます。
長いスクリプトは「type」、一文字打つだけなら「key」を使って、普段ターミナルで打ち込むコマンドを書けばいいだけです。
この他、画面にフォーカスを与えたりマウス入力も可能なので、いろんなものを簡単に自動化できます。
xdotoolは、「sudo apt-get install xdotool」でインストール。


Gnome Shell Extensions(サンプル)をつくる:
Javascriptなので簡単なのかと思ったら独特の構文でわかりにくく、ネットで検索してもチュートリアルやサンプルも少なかったり(古かったり)するので、フルスクラッチでコーディングするよりも似たようなものを書き換えたほうがいいらしいです。
まずはこちらを参考に、ターミナルで以下を入力すると

gnome-shell-extension-tool --create-extension

対話形式で名前や説明など(とりあえず簡単に書いておく)を決めていくと、
「Hello World」サンプルをつくることができます。


Name: Open_py36
Description: Open Terminal @py36
Uuid: 記入しなかったため自動的に「Open_py__@mne-ubu」になった

そうすると、以下のような画面がでてきます。


これは、メインのスクリプトの「extension.js」。
あとは、CSSとJSONファイルが付属しています。


これらのデータは、「~/.local/share/gnome-shell/extensions/」にあります。


サンプルを動かしてみる:
サンプルを動かすには再起動が必要なのですが、「Alt+F2」を押すと画面はそのままでExtensionsの再起動ができます。「Alt+F2」を押すと以下の画面がでてくるのでここで「r」を入力してリターンを押します。


ちょっと画面が変化して再起動します。
「Gnome-Tweaks>機能拡張」を開くと、先程のExtensionがリストに加わっているのでオンにします(以下:上から二段目)。


そうすると、トップバー右上にアイコンがでてきます。
このサンプルはトップバー上のアイコンをクリックすると画面中央に「Hello World」という文字が出現してフェイドアウトしていく(2秒間)というものなので、「Gnome-Tweaks>外観>アニメーション」をオンにしておく必要があります。



スクリプトを書き換える:
次は、このサンプルをベースに最初につくった「py36.sh」を実行させるプログラムに書き換えます。
スクリプトを実行させるファンクションは、検索するとここが参考になりました。

const Util = imports.misc.util;

Util.spawnCommandLine("script");

一行目でライブラリをインポートし、二行目はスクリプト実行するファンクションのようです。「script」のところに、「py36.sh」のパスを入れればよさそうです。
「Hellow World」の表示内容を「env: py36」に変更し、位置も少し上の方に変えておきます。


const St = imports.gi.St;
const Main = imports.ui.main;
const Tweener = imports.ui.tweener;

//追加:ライブラリインポート
const Util = imports.misc.util;

let text, button;

function _hideHello() {
    Main.uiGroup.remove_actor(text);
    text = null;
}

function _showHello() {
    //以下表示テキスト内容を「env: py36」へ変更
    if (!text) {
        text = new St.Label({ style_class: 'helloworld-label', text: "env: py36" });
        Main.uiGroup.add_actor(text);
    }

    text.opacity = 255;

    let monitor = Main.layoutManager.primaryMonitor;

    //以下の高さ(monitor.height / 4)へ変更
    text.set_position(monitor.x + Math.floor(monitor.width / 2 - text.width / 2),
                      monitor.y + Math.floor(monitor.height / 4 - text.height / 2));

    Tweener.addTween(text,
                     { opacity: 0,
                       time: 2,
                       transition: 'easeOutQuad',
                       onComplete: _hideHello });

 //以下のスクリプト実行コマンドを追加
 Util.spawnCommandLine("/home/mirrornerror/Documents/myshell/py36.sh");
}

function init() {
    button = new St.Bin({ style_class: 'panel-button',
                          reactive: true,
                          can_focus: true,
                          x_fill: true,
                          y_fill: false,
                          track_hover: true });

    //以下のアイコンをターミナルへ変更
    let icon = new St.Icon({ icon_name: 'utilities-terminal-symbolic',
                             style_class: 'system-status-icon' });

    button.set_child(icon);
    button.connect('button-press-event', _showHello);
}

function enable() {
    Main.panel._rightBox.insert_child_at_index(button, 0);
}

function disable() {
    Main.panel._rightBox.remove_child(button);
}

5箇所ほど変更追加(赤文字)しただけです。
アイコンについては、「Icon Browser」が便利です。
以下のようにアプリケーションとして、既存のアイコンリストを見ることができます。
たしか「sudo apt-get gtk3-icon-browser」でインストールできたはずです。


NormalとSymbolicというのがあり、Symbolicがシンプルなアイコンです。


今回参考としたサイト:
あまりないのですが、以下。あとは既存のExtensionsのコードを参考に改造していくほうが早そうです。
GNOME Shellの拡張機能を作ってみよう
How I developed my first gnome-shell extension
GNOME WIKI: Extensions
github gnome-shell-extensions
GNOME Developer: Tutorial for beginners and code samples
GNOME Developer: gtk3-icon-browser


「Argos」というGnome-shell-extensions:
簡単なものであれば、gnome-shell-extensionsにある「Argos」というextensionが非常に便利です。トップバーに追加できる機能拡張で、よく使うフォルダや自作のスクリプトなども実行できます。


Argosのgithubサイトに使い方など詳しくのっています。

今回つくったAnaconda仮想環境に入るためのスクリプトも入れてみましたが結構簡単に実装できました。


この画像にあるように比較的よく使うものを組み込んでみました。
・普通のターミナル起動
・Anaconda仮想環境ターミナル起動
・ローカルネットワークサーバ起動
・各ディレクトリ(Home/Documents/Downloads)

一番下にある「argos.r.sh」をクリックするとスクリプトを書くためのファイルが開きます(以下)。
#!/usr/bin/env bash

URL="github.com/p-e-w/argos"
DIR=$(dirname "$0")
HOME=/home/mirrornerror
DOC=/home/mirrornerror/Documents
DWN=/home/mirrornerror/Downloads
PYTHON=/home/mirrornerror/.pyenv/versions/anaconda3-5.1.0/bin//python

echo "| iconName=view-more-symbolic"
echo "---"
echo "Terminal | iconName=utilities-terminal-symbolic bash=pwd terminal=true"
echo "Anaconda py36 | iconName=utilities-terminal-symbolic bash='/home/mirrornerror/Documents/myshell/py36.sh' && 'terminal=false'"
echo "192.168.3.7:8008 | iconName=utilities-terminal-symbolic bash='$PYTHON -m http.server 8008 --bind 192.168.3.7' && 'terminal=true'"
echo "---"
echo "home | iconName=folder-symbolic href='file://$HOME'"
echo "Documents | iconName=folder-symbolic href='file://$DOC'"
echo "Downloads | iconName=folder-symbolic href='file://$DWN'"
echo "---"
echo "more"
echo "--$URL | iconName=help-faq-symbolic href='https://$URL'"
echo "--$DIR | iconName=folder-symbolic href='file://$DIR'"

いまのところこんな感じです。
echoを追加していくことで、内容がリスト化(ネストも可)されていきます。あとはタイトルとアイコン、そしてコマンドを記入していきます。外部にシェルスクリプトを配置しておけば、ここからコマンド起動させることができるので、いろんなことができそうです。

関連:
gnome shell extensions:自作その2

2018年5月27日日曜日

Ubuntu 18.04 LTS: ファイアウォール、ファイル共有、画面共有、SambaやVNCなど(Macと)

MacとUbuntuでファイル共有しているので、その設定の覚書。
・ファイアウォールを設置する
・ファイアウォールで特定の通信を許可する
・Sambaへの登録
・MacからUbuntuへアクセス(smb://~)

ついでに、画面共有も(vnc://~)。
・MacからUbuntuを覗く
・UbuntuからMacを覗く


Ubuntuへのファイアウォール設置:
Ubuntuソフトウェアから「gufw」で検索し、

ファイアウォール(gufw)をインストールし起動。
要管理者パスワード。

設定画面でステータスを「オン」。
このままだと外部からのアクセスはできなくなるので、以下の方法で特定の通信を許可する。

「ルール」タブをクリック。
画面下の「+」を押して特定の通信を許可する設定を追加。

一番下の空欄へ「smb」を入力すると「アプリケーション: SAMBA」が選択される。
「追加」を押して終了。これでSambaによる通信が可能となるようです。


Ubuntu側のファイル共有設定をする:
Ubuntu側のホーム以下にあるPublicとPicturesを共有することにします。
まず、「Public」を右クリックで「ローカルネットワーク共有」を選択。
そうすると以下の画面。
とりあえず3箇所にチェックを入れて制限を緩めにしておく。
同様に「Pictures」など他のディレクトリも共有したい場合は同じようにチェックを入れておく。
一旦閉じて、再度「Public」を選んで中身を見る。
右上の「共有の設定」を押す。Sambaがインストールされていなければ「サービスのインストール」でインストールする。

「共有の設定」が押されると「設定」の「共有」へジャンプし、
ここで「ファイル共有」をクリックし、
パスワード入力やネットワークをオンにしておく。
以上で共有するディレクトリの設定は終了。
基本これだけでもファイル共有可能。


Sambaへユーザーとパスワードを登録:
ターミナルを起動し、Sambaステータス確認。

service smbd status

以下のような感じでステータスが出てくる。

次に、ユーザーとパスワードを登録しますが、登録名はUbuntu上のユーザー名と同じにしなければいけないようです。

sudo pdbedit -a username

を入力すると(usernameはUbuntu上のユーザー名)、ルート管理者パスワード入力のあとSamba用パスワード設定を求められるので入力設定(Ubuntuルート管理者パスワードとは異なってもOK)する。これで登録終了。
Ubuntu上のユーザー名以外を登録しようとすると、

Failed to add entry user username

と最後に出てきて登録失敗します。
ちなみにSambaに登録したユーザーの削除は以下。

sudo pdbedit -x username

Samba登録者リストの表示(登録されているかどうか確認)は以下。

sudo pdbedit -L

を入力すると、

username:1000:username

という感じで登録者が表示される。
より詳細にリスト内容を表示させるには-vをつけて、

sudo pdbedit -L -v

を入力。
以上でSambaへの登録終了。

もしSambaの再起動が必要なら以下。

systemctl restart smbd nmbd


MacからUbuntuへアクセス:
Macのメニューバー>移動>サーバへ接続...(Command+K)

「サーバアドレス:」へ「smb://UbuntuのIPアドレス」を入力。

smb://192.168.3.7

UbuntuのIPアドレスを調べるにはUbuntu上のターミナルで「ifconfig」を入力。
「127.0.0.1」はlocalhostなので、次にある「192.168.x.x」など。

ゲストで接続(パスワードなし)なら「ゲスト」を選択し「接続」。


また、Sambaの登録ユーザ+パスワードで接続する場合は以下。

Ubuntuの管理者パスワードを入力してもダメと言われるのでSamba用パスワードを入力。
接続すると、
ボリューム選択の画面へ。Ubuntu側では「Pictures」と「Public」の二つのディレクトリを共有化しているので、この二つが出てきます。
「Public」の方を選ぶと、
このようにMacのデスクトップ上にマウントされます。
ファインダーでは以下ような感じ。
画面右を見るとMac上に「Public」がマウントされており、「ネットワーク>192.168.3.7」以下には「Pictures」と「Public」もあります。
画面左の「共有」には「192.168.3.7」があり、画面右の「ネットワーク>192.168.3.7」に対応しています。
マウントされたのは「Public」でしたが、Ubuntu側では「Pictures」と「Public」を共有化しているため結局は両方にアクセス可能。あるいはゲストでも登録ユーザーでも同じ結果。
「共有」の「192.168.3.7」をアンマウントすると接続解除


しばらくすると再接続できなくなる:
接続解除したあと再接続しようとすると接続できなくなることがあります。
先ほどは「Finder>移動>サーバへ接続...(Command+K)」で、

smb://192.168.3.7

を入力して接続しましたが、以下のように接続失敗してしまいます。

どうやらUbuntu側のサーバがダウン(タイムアウト)しているようで、Ubuntu側のターミナルで、

systemctl restart smbd nmbd

を入力すればサーバが再起動されてMac側からサーバを認識できるようになるようです。

追記:
どうやらWifiドライバのせいで接続が途切れるようで、それについては以下。

Wifiが途切れる(解消)/ Ubuntu 18.04LTS / MSI GS43 GTX1060 / QCA6174



VNCによる画面共有/MacからUbuntuを覗く:
Ubuntuの「設定>共有」で「画面共有」をアクティブにする。

チェック項目、パスワード設定、それぞれをオンにしておく。

次にファイアウォールの設定。
一番下の空欄に「vnc」を入れると「アプリケーション:VNC」になります。
「簡易」タブをクリックし、「ポート:5900」などと任意のポート番号を入れておきます。「追加」、「閉じる」で設定終了。


Macのほうで、「移動>サーバへ接続...」から、
「vnc://UbuntuのIPアドレス」を入力して「接続」。

設定したパスワードを入力して「接続」。

少し反応が鈍いですが、MacからUbuntu上のターミナルも操作できます。


VNCによる画面共有/UbuntuからMacを覗く:
Macの「システム環境>共有」から、「画面共有」にチェックを入れておく。
そうすると「画面共有:オン」の下に「vnc://192.168.3.2/」などとアドレスが表示されるので、後でそのアドレスをUbuntu側で入力する。Macの設定は以上。

次にUbuntu側。
Ubuntuソフトウェアから以下をインストール。
「Remmina」というのもありますが、こちらの「デスクトップビューアー」が使いやすかったです。

起動すると以下の画面。
「VNC」を選び、その下にMacのIPアドレスを入れるだけ。
画面サイズ設定にチェックを入れ「接続」。

表示される前に、Mac側のユーザー名とパスワードを入れて「認証」を押す。
そうすると以下のように表示されます。

とりあえずウィンドウ内に映し出しサイズなど調整してからフルスクリーンにするといいと思います。
フルスクリーンでは、向こう側の画面を操作することが優先されるため画面を元に戻せなくなりますが、画面中央上部にマウスを持っていくと隠れスイッチが出てくるので、そこで元の画面に戻ることができます。

2018年5月25日金曜日

Ubuntu 18.04 LTS:各種設定・機能拡張(Extensions)など

Ubuntu 18.04インストール後、いくつかのセッティングをしました。今後インストールし直すときもあるかもしれないのでカスタマイズした設定の覚書。


日本語入力・切替え:
普段Macも使っているのでスペースキーを中心に、[英数][スペース][かな]の三つのキーで切替入力変換できるように[無変換][スペース][かな]のキーへ割り当て。

とりあえず以下から。
「日本語(Mozc)」だけでも日本語変換は可能でしたが、「日本語(OADG 109A)」を入れないとキー配列が日本語キーボードとずれてしまうので両方入れました。

デスクトップのメニューバー右端を見るとこんな感じででてきます。

最初は上下で日本語と英数を切り替えるのかと思っていたら、「日本語(Mozc)」だけを使って切替えるようです。普段は下の「日本語(OADG 109A)」には切り替えないらしい。これは単にキー配列のためだけに入っているのかもしれない。クリックでこれに切替えると半角英数のみで日本語切替してくれないため、挙動が変ならここをチェックしてみるといいのかもしれない。
ちなみに、何もしていないときに入力切替しても何も起こらず、実際に入力を行っているとき(画面などにフォーカスを与えて)にはじめて切替可能となるようです。試しにキーボード押して何も起こらないからといって焦らないように。

キーマッピング:
そして入力切替のためのキーマッピングですが、上画像のプロパティをクリックすると以下の画面が出てきます。
左画面下のほうの「キー設定の選択」で「MS-IME」を選んで「編集」を押すと、「MS-IME」ベースのキーマッピングをカスタマイズできるようです。ただし一つでも変更すると、「カスタム」という名前になってしまうようです。
今回は右画像にあるように、[Muhenkan]キーと[Hiragana]キーの二つに追加でマッピングしてみました。
英数に切替えるには、とにかく「IMEを無効化」すればいいようです。日本語の場合は、「直接入力」の時だけ「IMEを有効化」し、そのほかは「ひらがなに入力切替」にすればいいようです。基本的にはこの4種類の状況においてマッピングすればいいようですが、同じキーが使われていないかこのリスト内をチェックする必要があります(同じキーがある場合はその項目を削除)。
これで、Macのように日本語切替できるようになりました。


Homeディレクトリ以下を英字表示に変更:
日本語化してしまうと、ホーム以下にあるデスクトップ、ドキュメント、ダウンロードなどのディレクトリ名も日本語になってしまいcdコマンドなど使う際に面倒になるので、それらを英字表記に変更。

LANG=C xdg-user-dirs-gtk-update

をターミナルから入力して変更。変更内容について再度確認してくるので、「Don't ask me this again」にチェックを入れつつ「Update Names」をクリックして再ログイン。
そうすればこのように各ディレクトリが英字表記に切り替わります。
左側の「ホーム」と「デスクトップ」だけはなぜか変わらないけれども特に問題ない。


GNOME Tweaksをインストール:
GNOME Tweaksを使うとより細かい設定ができるようなので、「Ubuntuソフトウェア」から「gnome tweaks」で検索しインストール(sudo apt install gnome-tweak-toolでも構わない)。

通常使用している「設定」ではできないことが可能になりますが、「機能拡張」欄にあるようなGNOME Shell Extensionsを追加していくことでかなりカスタマイズできるようです。

現在はこのようなExtensionsを入れてあります。これらの一部は「Ubuntuソフトウェア」の「ユーティリティ」などからもインストールできますが、「GNOME Shell Extensions」というサイトに行けばもっと見つかります。


GNOME Shell Extensionsからインストール:
GNOME Shell Extensions(要ログイン)に行きキーワードで検索すればたくさん機能拡張が出てきます。すべてクリック操作なので気軽にインストールできます。
こんな感じで「Installed extensions」というページに行けば、パソコンにインストールしてあるExtensionsと同期して機能のON/OFF、設定、アンインストールがブラウザ上でできます。
特に気に入ったものが以下です。


これは画面上部のトップバーにアプリメニューバーを組み込む機能拡張です。
通常トップバーにはアプリの操作メニューがでてこないため、もう一段下にアプリ用メニューバーがでてくるところ、その二段をひとつにまとめてくれます。
特にChromeを開いているときには、Chromeのメニューバーが出てこないため不便でしたが、これを使うことで表示するようになりました。
こんな感じでMacと同じように「ファイル 編集 表示・・・」という感じでトップバーに現れます。他のアプリでも同じように現れてくれるので便利です。
ただ、Ubuntu 18.04の場合は最新のものを
からダウンロードし、解凍したファイルの中身を
~/.local/share/gnome-shell/extensions
の中に入れる必要があります。さらに、そのままでは設定ができないので、ここに書いてあるように
sudo apt install gir1.2-clutter-1.0 gir1.2-clutter-gst-3.0 gir1.2-gtkclutter-1.0
で依存ファイルをインストールすれば問題なく動きます。


NO Title Bar:
これはタイトルバー(アプリウィンドウ上部のバー)を消す機能拡張。ならびに、左上に設置したウィンドウボタンの位置も変えてくれます。
以下はAtomエディタを使った場合ですが、通常トップバー、タイトルバー、メニューバーの3段構成になって上2段が無駄に見えます。

しかし、先ほどのGnome global Application menu(HUD for Gnome)と合わせて使うと、以下のように1段にすっきりとまとまってくれます。
もともと、トップバーやタイトルバーが無駄だと感じていたので、これで納得です。

できるだけ一本のバーにまとめたいということから、似たようなもので「Dash to Panel」や「TaskBar」という機能拡張もあります。MacのDockのようにお気に入りのアプリなどを入れておくことができるトップバー(あるいはボトムバー)になり、さらにアプリのメニューもいっしょに入れることもでき、トップバー、Dock、メニューバーを一本化できます。試しにやってみましたが、アプリメニューもバーに入れてしまうと、あまりにもごちゃごちゃしたのでやめました。


Extensions:
これは、インストールしたExtensionsをトップバーからのメニューでON/OFF/設定できる機能拡張です。
GNOME Tweaksでも可能なのですが、手っ取り早く設定できるのであると便利です。一番下のAdd gnome shell extensions...をクリックすればサイトへ飛んでくれます。
一時的に機能を中断したり、Extensionsの品定めしているときには便利。


Gno-Menu:
トップバーからアプリなど選択できるメニューの機能拡張。グリッド状に複数のアイコンが配置されるため探しやすい。主なディレクトリ、最近使った書類、頻繁に使うアプリ、ブックマークなどもある。最近更新されたようでワークスペース選択もできる多機能。

トップバーにはこのMenu(上画像では足跡マーク)以外にもViewやAppsも追加できる。ViewやAppsは場所がとられてしまうので、最低必要なMenuだけでも十分。
このGno-menuだけでもたくさんのことができる。つい欲張って多機能にしようとすると煩雑になってくるので、必要な部分だけを使うと言う感じ。もともとトップバー左端には「アクティビティ」というクリックエリアがあったけれども、それも消してしまいました。


Dash to Dock
DashをDockに追加させるだけでなく、Dock自体いろいろ調節できる機能拡張。
Dockはデフォルトのままだと融通が効かないのでこれもExtensionsでなんとかならないかと。
トップバーとメニューバーの一本化はできたので、あとはよく使うアプリなどをいれておく場所なのですが、さきほどのGne-MenuがあるのでもはやDock自体あまり必要なさそう。ただ、以前もよく使っていたのでできれば使いたいという感じ。
画面左上に主な機能が集中しているので、今回もまた画面左にDockを設置することに。
・ダッシュを一番上に配置(たぶんあまり使わない)
・アプリ画面最大化(あるいは重なると)の際にDockが自動的に隠れる
・マウスを左端に持って行けば再びDockが出てくる
・Dock上でマウスホイールを動かすとworkspace移動
というくらいでしょうか。サイズ、色や透明度も変えられ、デフォルトよりは細かく設定できます。

左:Dockが隠れている時、右:マウスを画面左端につけるとDockが飛び出てくる。
もともと、トップバー1本(ボトムバーなし)にできるだけ機能を集中させ、必要に応じてDockが左から出てくるようにしたかったので、これで大体想定していた構成になりました。あとは以下にあるような細かなパーツをトップバーに組み込む感じ。


Clock override:
トップバー上の時計のフォーマットを自由に変えられる機能拡張。
年/月/日/曜日/時/分/秒の表示が可能。そのほか任意の言葉なども表示できます。
デフォルトだと年が表示できなかったような。


Show Desktop Button:
デスクトップを瞬時に見ることができるトップバー上のボタン。上画像真ん中の家型のボタン。


WorkspaceBar:
ワークスペースを移動するためのトップバー上のボタン。上画面左端。
ほかにもWorkspace用の機能拡張はいくつかあるのですが、これが使いやすそうでした。現在のワークスペースの数、そしてワンアクションで行きたい番号をクリック。マウスホイールでも移動可能。
ただしこのままだと設定をクリックするとバグってしまう。少し古いタイプなのか、gtk2.0開発環境をインストールしてみることに。

sudo apt-get install libgtk2.0-dev

でインストールすると無事設定ができるようになりました。以下が設定画面。位置が調節可能。
もしかすると、少し古いタイプでもgtk2.0を入れれば動くのかもしれません。


Trash:
ゴミ箱をトップバーに表示する機能拡張。
以前はDockの一番下の方にあったゴミ箱だけれども、Ubuntu17.04あたりからデスクトップの任意の位置に表示され、どこに置こうか迷ってしまう。というよりも邪魔なのでゴミ箱を非表示にして、そのかわりにこのTrashをトップバー上に置いてすっきりさせました。
一応トップバーから空にする/開く/中身の確認も可能です。
いつも不要ファイルを右クリックしてゴミ箱に入れているので、デスクトップ上になくても特に問題なし。


GDebi Package Installer:
Ubuntuソフトウェアからインストールするdebファイルインストーラアプリ。

いままではdpkgコマンドを使ってdebファイルをインストールしていましたが、gdebiコマンドを使うと依存関係も解決しながらインストールできるようです。それのGUIアプリで、ダウンロードしたdebファイルを選択してインストールボタンを押すだけなので使いやすい。


Atom editor:
普段使っているエディタ。前から使っているのでダウンロードしておきましたが、Ubuntuソフトウェアからインストールすると日本語入力できないAtomになってしまいます。再度、https://atom.ioからdebファイルをダウンロードして先ほどのgdebiでインストールし直したら日本語入力できるようになりました。
ちなみに、Anaconda NavigatorからはVSCodeが簡単にインストールできます。VSCodeのほうが軽快に動くので、そっちのほうがいいかもしれません。
Dockへのランチャー登録は、DashからAtomを見つけ出し右クリックで登録するか、ターミナルでatomと入力して起動するとDockにアイコンがでるのでそのまま右クリックで登録。


Polo File Manager:
二窓のファイルマネージメントアプリ。
複数のフォルダ間のファイル移動やコピーなど多い時は便利。


Obmin:
ワンクリックでファイルシェアリングできるHTTP(HTTPS)ファイルサーバー機能拡張。
トップバーからオンにすると、他のPCのブラウザ上からアクセスできるようになります。
ブラウザを通して画像など閲覧/ダウンロードできるので便利です。
これは設定画面ですが、共有したいディレクトリやフォルダを複数追加できます。チェックを外して停止させたり、サーバごとオフにすることも簡単にできます。
ちなみに他のPC上のブラウザ(http://192.168.3.2:8088にアクセス)からはこのように見えます。必要なファイルをダウンロード(あるいはドラッグ&ドロップ)するだけです。


Firewall Configuration:
Ubuntuソフトウェアから入手できるgufwというファイアウォール機能拡張。
起動と同時にパスワード入力が必要。設定画面内でオンにすればいいだけ。
ただし、ローカルネットワーク内でのファイル共有をするには、オンにしたあとに「ルール」ボタンを押して設定を追加(+ボタン)する必要がある(設定が面倒であれば一時的にオフにするしかない)。

関連:
Ubuntu 18.04 LTS: ファイアウォール、ファイル共有、画面共有、SambaやVNCなど(Macと)


まとめ:
いろいろカスタマイズするのは楽しいのですが、あまりにも機能を積み込みすぎると重くなりそうなので、できるだけ少なくしてみました。
結果的には大体頭に思い浮かべていたような感じにはなりました。個人的にはGnome global Application menu(HUD for Gnome)を使うことでトップバー周辺がすっきりしたのが一番の収穫。
MacとUbuntuの2台使っているのでファイル共有はあると便利。
GNOME Shell Extensionsにはたくさんの機能拡張がありますが、古いものの多く必ずしも動くとは限りません。しかし、gtk2.0など古い開発環境などインストールしておけば(sudo apt-get install libgtk2.0-dev)少しは動くかもしれません。