- Linux Mint を始めたばかりの人が抑えておくべき5つのこと
- 「mintUpdate」アップデートマネージャー のレベルの意味
- フリーズしたアプリの強制終了の仕方 〜 kill コマンド〜
- CPU と OS が 32 bit なのか 64 bit なのかを確認する「lscpu コマンド」
- メモリー(RAM)の規格・周波数・全容量・空き容量・エラーの有無を調べる
- 自分の Mint のバージョン/コードネーム/Ubuntu のバージョン/コードネームを確認する方法
- Mint Tools を使い倒す
- アプリ/ソフトのアンインストールと更新する方法
- X-Apps について少し知っておこう
- 「'gksu' not found」 廃止された gksu の代わりの方法
- Linux Mint 18 : DVD/Blu-ray リッピングソフト「MakeMKV」
- Mint 19.x: 「K3b」でブルーレイディスクに焼く方法
- Mint 18: 「avconv」でデスクトップの録画も、動画や音楽の変換も行う
- Mint 19.x : 画像・音楽・動画の変換これ一本「Ciano」
- Mint 18.2 : 字幕を同時に二つ表示できる多機能な動画プレイヤー「SMPlayer」
- Mint 18 : CDDB に Freedb を利用している CD リッピングソフト「Asunder」
- Mint 19.x : 音楽ファイルのタグ編集ツール「Kid3」
- Linux Mint 19.x : インストールすべき Rhythmbox プラグイン 9 選
- Linux Mint 18.3 : VirtualBox に無料の Windows を合法的にインストールする方法
- Linux Mint 18: Wine の導入
- Linux Mint 18: Wine で「DVD Shrink」をインストール
- Linux Mint 18: Wine で「DVD Decrypter」をインストール
- Linux Mint 19.x: 5ch専ブラ「Jane Style」は Wine で普通に使える
- Linux Mint 18 : 「winetricks」を使って「Adobe Air」をインストールし「はがきデザインキット」を使う
- Linux Mint 19.x: 画像縮小 Adobe AIR アプリ「縮小専用」を使う
- Linux Mint 18: 「PlayOnLinux」を使い「Amazon Kindle」をインストールする
- Linux Mint 18.3 : ハイレゾ音源対応 Windows ユーザーに人気の「Foobar2000」をインストール & 文字化け対策
- Mint 19.x : 画像ビューア「IrfanView」を簡単にインストールして使う
- Linux Mint 18.3 : Windows アプリを Flatpak 形式でパッケージングするプロジェクト「winepak」
2022.09.19 Monday
2018.03.31 Saturday
Windows : Linux Mint を VirtualBox にインストールする方法 | 03:29 |
VirtualBox とは
Oracle VM VirtualBox は物理的なマシンに仮想的なマシンを作成するための、無料のオープンソースソフトです。物理的なマシンにインストールされた OS のことをホスト OS と呼び、VirtualBox によって作成された仮想的なマシンにインストールされた OS のことをゲスト OS と呼んでいます。Windows や max OS ユーザーが Linux を気軽にゲスト OS として導入する手段としてよく用いられます。
Windows 8 で行っていますが、Windows 7 でも 8.1 でも 10 でも、はたまた Linux Mint 上であっても操作に大差はないはずです。
VirtualBox・Linux Mint のインストール
- Oracle VM VirtualBox の [ Windows hosts ] リンクからインストーラーをダウンロードします。Linux Mint の ISO もダウンロードしておきましょう。
- ダブルクリックしてインストーラーを開始します:
- 特にいじらずに [ Next ] をクリックしていってください:
- 途中で必要なデバイスソフトウェアのインストールが求められます。全てインストールしましょう:
- チェックボタンを外さずに [ Finish ] をクリックして VirtualBox を起動します:
- 起動するとメイン画面が表示されます。[ 新規 ] ボタンをクリックしましょう:
- 下の画像のように入力してください。名前は好みに合わせて入力してください。32bit マシンの場合は [ バージョン ] で 64bit が選べないようになっているはずなので、Ubuntu (32-bit) を選んでください:
- メモリーは最低 1GB は割り当てます。2GB 以上が推奨されているので、ここでは 2GB にしました:
- [ 仮想ハードディスクを作成する ] にチェックが付いているのを確認して [ 作成 ] ボタンをクリックします。ハードディスクのファイルタイプは [ VDI ] を選びます:
- [ 可変サイズ ] を選択して [ 次へ ]:
- HDD の容量は 20GB 以上が推奨されています。数値をセットしたら [ 作成 ]:
- メインパネルに戻ります。作成した Linux Mint が選択された状態で [ 設定 ] をクリックしてください:
- [ ストレージ ] -> [ コントローラー: IDE ] -> [ 空 ] をクリックし、右のディスクアイコンから [ 仮想光学ディスクファイルを選択 ] をクリックします:
- Linux Mint の ISO イメージを選択しましょう。今回は Linux Mint 18.3 MATE(64bit) を選びました。[ OK ] をクリックします:
- メイン画面の [ 起動 ] をクリックして立ち上がるまで待ってください:
- デスクトップにある [ Install Linux Mint ] アイコンをクリックして Linux Mint のインストールを開始します。インストールのチュートリアルはこちらをご覧ください:
一つ注意する点は [ ディスクを削除してLinux Mintをインストール ] にチェックをつけることです。ディスクを削除すると有りますが、この場合に置いては Windows が消えるわけではないのでご心配なく:
[ 続ける ]:
- インストール中画面が暗くなるかもしれません。その時は VirtualBox のウィンドウをクリックすると再び表示されます。インストールが終わるとこのような画面が表示されます。[ 今すぐ再起動する ] をクリックして再起動します:
- このような画面では指示通りEnterを押せば大丈夫です:
- 再起動しました。ログインします:
- 立ち上がりました。ネットにもデフォルトで繋がるようです:
- 画面のサイズが気に入らないかもしれません。ミントメニューから [ モニターの設定 ] を起動し [ 解像度 ] を調節しましょう:
Guest Addtions のインストール
Guest Additions とはゲスト OS のパフォーマンスをより良く、使いやすくするために最適化していくれるデバイスドライバーとシステムアプリケーションからなるツール群です。VBoxGuestAdditions.iso というファイル名で Virtualbox のインストール先に含まれています。これによりマウスカーソルのゲストとホストでの行き来がシームレスになります。
- [ デバイス ] -> [ Guest Addtions CD イメージの挿入 ]:
- [ OK ]:
- [ 実行する ]:
- パスワードを入力し [ 認証する ]:
- インストールが終わったらEnterを押して端末を閉じます:
ホスト OS とファイル共有
- Linux Mint をシャットダウンします:
- Linux Mint が起動していない状態で VirtualBox のメインウィンドウから [ 設定 ] -> [ 共有フォルダー ] -> [ 新規共有フォルダーの追加 ] アイコンをクリックします:
- [ フォルダーのパス ] -> [ その他 ] をクリックします:
- デスクトップまでナビゲートし、[ 新しいフォルダー ] をクリックしてデスクトップ上に共有フォルダーを追加します:
- shared と名づけて [ フォルダーの選択 ] をクリックします:
- [ 自動マウント ] にチェックをつけて [ OK ]:
- Linux Mint を起動したら端末を開き、以下を実行してください:
sudo usermod -a -G vboxsf $USER
ln -s /media/sf_shared ~/shared
- 試しに、Windows の shared フォルダーに画像を入れると、ファイルが Linux Mint から見ることが出来ました(管理者権限でディレクトリーを開いてください):
参考元: instructables
| Linux |
2018.03.30 Friday
Linux Mint 18.3 : Conky の Lua スクリプトの書き方 Part3 | 01:02 |
描画に必要な計算と if 文
インジケーターバーを表示できたので、自分の命名規則に従ってそれぞれの変数の前に「bar_」を付け加えて、変数をすべて上部に移動させました:
--SETTINGS FOR CPU INDICATOR BAR
bar_bottom_left_x= 50
bar_bottom_left_y= 200
bar_width= 30
bar_height= 100
bar_value=tonumber(conky_parse("${cpu}"))
bar_max_value=100
--set bar background colors, 1,0,0,1 = fully opaque red
bar_bg_red=1
bar_bg_green=0
bar_bg_blue=0
bar_bg_alpha=1
--set indicator colors, 1,1,1,1 = fully opaque white
bar_in_red=1
bar_in_green=1
bar_in_blue=1
bar_in_alpha=1
--END OF SETTINGS
--DRAW BAR INDICATOR
--draw background
cairo_set_source_rgba (cr,bar_bg_red,bar_bg_green,bar_bg_blue,bar_bg_alpha)
cairo_rectangle (cr,bar_bottom_left_x,bar_bottom_left_y,bar_width,-bar_height)
cairo_fill (cr)
--draw indicator
cairo_set_source_rgba (cr,bar_in_red,bar_in_green,bar_in_blue,bar_in_alpha)--set indicator color
scale=bar_height/bar_max_value
indicator_height=scale*bar_value
cairo_rectangle (cr,bar_bottom_left_x,bar_bottom_left_y,bar_width,-indicator_height)
cairo_fill (cr)
しかし、もう少し機能を盛り込んだり飾り付けしたりしたいです:
- インジケーターの周りのボーダーを描画する機能がほしいです。
- ボーダーは任意にします。
- ボーダーの色や太さをセットする機能がほしいです。
- バーに「警告値」をセットしたいです。
- バーがある値にまで達したら違う色で表示するようにしたいです。
ボーダーを追加します。まずは設定を変数に格納します:
bar_border=1 --set 1 for border or 0 for no border
--set border color rgba
border_red=0
border_green=1
border_blue=1
border_alpha=1
--set border thickness
border_width=10
今回はボーダーの表示/非表示の切り替えに数字を選んでいます。1 = yes, 0 = no という意味で使っていますが、もちろん bar_border="yes" のように文字を使っても構いません。欠点は Yes と yes を比較する際、違うものと認識されることです。これは組み込みの string.upper() や string.lower() 関数で解決することが出来ますが、別の話なので今回はこの辺にして、1 または 0 を指標として使います。
ボーダーはインジケーターにちょうど重なってはいけません。これを実現する方法は思いつくだけでいくつか有ります。インジケーターの背景の矩形に塗りつぶした矩形を描画できます。そうなるとボーダーの矩形はインジケーターの矩形よりも大きくする必要があるでしょう。インジケーターの周囲に背景の矩形がはみ出る感じです。別の方法としては cairo_stroke で矩形を描画することで単に周りのボーダーだけを描くのもありです。四本の直線をそれぞれ描くこともできるでしょう。
これらの方法にはそれぞれ利点と欠点が有りますが cairo_stroke で四角形を描くことにします。四角形を描くとき line_width の適応のされ方が少しトリッキーです。これら 3 つのすべての四角形の幅は 60、高さは 40 にセットされています。見てわかる違いは線の太さがそれぞれ 1, 10, 20 であることです。
bar_bottom_left_x や bar_bottom_left_y とは相対的にボーダーの x と y 座標をセットする必要が有ります。これはバーの位置を変えたい時に単純に bar_bottom_left_x と bar_bottom_left_y の値を変更すればいいだけにしたり、他の変数もこの値に関連して自動で変更したりするすようにしたいからです:
border_bottom_left_x=bar_bottom_left_x-(border_width/2)--we subtract because we are going to the left
border_bottom_left_y=bar_bottom_left_y+(border_width/2)--we add because we are going down
これはボーダーとなる矩形をより左下からスタートし、インジケーターとなる矩形よりも広く大きくしなくてはいけません:
brec_width=bar_width+border_width
brec_height=bar_height+border_width
上記のコードを書いている時に、インジケーターの矩形の変数名に bar_width と bar_height というように width と height を使っているため、ボーダーとなる矩形も border_width と border_height という風に名づけようとしました。しかし、ボーダーの line_width の値を格納する変数名にすでに使っているので border_width が使えません。何か別の変数名を思いつく必要が有ります(ここでは brec_)。
ボーダーを描くための変数の準備が整ったので、これらの変数を矩形を描画する関数に渡して実行してみます:
cairo_set_source_rgba (cr,border_red,border_green,border_blue,border_alpha)
cairo_set_line_width (cr,border_width)
border_bottom_left_x=bar_bottom_left_x-(border_width/2)
border_bottom_left_y=bar_bottom_left_y+(border_width/2)
brec_width=bar_width+border_width
brec_height=bar_height+border_width--remember that we need to make the value of brec_height negative at some point because we are drawing up
cairo_rectangle (cr,border_bottom_left_x,border_bottom_left_y,brec_width,-brec_height)--we will set brec_height negative in this line
cairo_stroke (cr)
計算は正しく行っているので、ボーダーがインジケーターに干渉することはないはずです。なのでこのコードは背景を描画する前、背景を描画した後、インジケーターを描画する前、インジケーターを描画した後におけます。
これでボーダーを描くことは出来ましたが、ボーダーを描くか描かないかを指定するための変数 bar_border はまだ使っていません。if 文で実装します。
if 文
例えば:
if bar_border==1 then
--border drawing code
end
これは if 文のシンプルな構文です。bar_border に 1 を代入しておけば、ボーダーは描画されます。もっと正確に言えば、bar_border の値が 1 であれば、then から end までのコードが実行されます。0 が代入されると、then から end までのすべてのコードがスキップされ、ボーダーの描画は実行されません。
if 文には then と end は必要です。if 文の使いようによっては then が複数含まれることも有ります。また、何かと何かが等しいかどうかを比較するにはイコールを 2 回(==)続ける必要が有ります。その他の比較演算子としては:
- A~=B AとBは等しくない
- A<=B AはB以下
- A<B AはBより小さい
より複雑な if 文は後ほど触れます。
警告色と複雑な if 文
インジケーターの任意の特徴の一つにボーダーを追加しました。今回はバーの色を変えていこうと思います。色を変化させるためには変数をさらに追加する必要が有ります。色で警告したい場合は、赤色が良いでしょう。バーの背景も再度色付けする必要があるでしょう。今回は red, green, blue, alpha などの変数名を短くしています:
--set alarm value, this is the value at which bar color will change
alarm_value=80
--set alarm bar color, 1,0,0,1 = red fully opaque
ar,ag,ab,aa=1,0,0,1
CPU 使用率が 80% を超えない限りベースとなる色で表示したいです。そこで、if 文をさらに追加して色が変化するようにします。取り組む方法はいくつか有りますが、まずは、自分たちがこれまで書いてきたインジケーターを描画するコードを思い出しましょう。色を変更するのはこの部分なので、ここを編集していきます:
cairo_set_source_rgba (cr,bar_in_red,bar_in_green,bar_in_blue,bar_in_alpha)--set indicator color
scale=bar_height/bar_max_value
indicator_height=scale*bar_value
cairo_rectangle (cr,bar_bottom_left_x,bar_bottom_left_y,bar_width,-indicator_height)
cairo_fill (cr)
if 文を色に適用するには次のことができます。bar_value は cpu 使用率が格納されている変数の名前で、alarm_value は 80 以上にセットしています:
if bar_value<alarm_value then
cairo_set_source_rgba (cr,bar_in_red,bar_in_green,bar_in_blue,bar_in_alpha)
else
cairo_set_source_rgba (cr,ar,ag,ab,aa)
end
ちゃんと動作していることを確認するにはどうしたら良いでしょうか。正しくコードを書いているつもりですが、実際に CPU 使用率が 80% に達さないとバーの色が白から赤には変化しません。CPU 使用率を無理やり 80% まであげることも出来ますが、変数の値を変えるほうがより簡単です。以下の行を:
bar_value=tonumber(conky_parse("${cpu}"))このように変えます:
bar_value=80--tonumber(conky_parse("${cpu}"))
すでに書いたコードをテストするために変更するのはテストが終わった後で元に戻すが単純に大変なのであまり好きではありませんが、とりあえずテストが終わったら忘れずに元に戻すようにします。テスト用の値と -- を取れば元に戻ります。
実際、背景となる矩形も高さが可変する矩形も同じ赤色になってしまうので背景となる矩形の色は黒に変更しておきます:
--set bar background colors, 1,0,0,1 = fully opaque red
bar_bg_red=0
bar_bg_green=0
bar_bg_blue=0
bar_bg_alpha=1
さて、もう少し欲張って、別の色を追加したいと思います。例えば、CPU 使用率 50% までは緑色で表示するといった具合です。50〜80% までは黄色で表示し、最後に 80% に達すると赤色になるといった感じです。そこで、変数の設定に戻ります。すでに警告(80% 以上)するときの値と色はセット済です:
--set value for first color change, low cpu usage to mid cpu usage
mid_value=50
--set "low" cpu usage color and alpha, ie bar color below 50% - 0,1,0,1=fully opaque green
lr,lg,lb,la=0,1,0,1
--set "mid" cpu usage color, between 50 and 79 - 1,1,0,1=fully opaque yellow
mr,mg,mb,ma=1,1,0,1
ベースとなるバーの色の変数を再利用します。数字を変更して緑や黄色にセットします:
bar_in_red=1
bar_in_green=1
bar_in_blue=1
bar_in_alpha=1
色の表示の仕方に重要な変更を加えようとしているので、新しい値と警告値に置き換えます。私は私なりの命名規則に従っていますが、もちろん自由に変数名をつけてください。CPU の使用率が 0〜49% のときに緑色に、50〜79% のときに黄色にし、80% 以上であれば赤色にする if 文を書く方法について考える必要があります。実際に書いてみましょう:
if bar_value>=mid_value then --ie if value is greater or equal to 50
cairo_set_source_rgba (cr,mr,mg,mb,ma)--yellow (mid color)
elseif bar_value>=alarm_value then --ie if bar_value is greater or equal to 80
cairo_set_source_rgba (cr,ar,ag,ab,aa)--red (alarm color)
else
cairo_set_source_rgba (cr,lr,lg,lb,la)--green (low color)
end
必要な条件分岐は 3 だけです。bar_value の値を 49 などにし、このコードを試してみましょう。バーが緑色に表示されるはずです。bar_value=50 にすればバーが黄色になるはずです。しかし、bar_value=80 でも黄色で、100 でさえも黄色のままです。このコードは完璧に論理的に書かれているように思えますが、これはつまずくかもしれない落とし穴です。if 文がどう実行されるか考える必要が有ります。ヒントは比較の順序にあります:
if bar_value>=mid_value then --ie if value is greater or equal to 50
cairo_set_source_rgba (cr,mr,mg,mb,ma)--yellow (mid color)
最初のコードは 50 から 100 までのどの数字にマッチします。なので CPU 使用率が 50 から 100 までだった場合、黄色く表示されるのです。スクリプトが実行されると bar_value の値が mid_value の値と等しいか大きい場合に、対応するコードが実行されそこで if 文から抜けます。
bar_value の値が 50 より小さい場合に最初の比較で false が返され、次の比較に移ります。しかし、この比較も false を返すので、最後の else に対応するコードが実行されます。この間違いを正す方法はたくさんありますが、比較の順番を変えることで対処することにします:
if bar_value>=alarm_value then --ie if value is greater or equal to 80
cairo_set_source_rgba (cr,ar,ag,ab,aa)--red (alarm color)
elseif bar_value>=mid_value then --ie if bar_value is greater or equal to 50
cairo_set_source_rgba (cr,mr,mg,mb,ma)--yellow (mid color)
else
cairo_set_source_rgba (cr,lr,lg,lb,la)--green (low color)
end
例えば、90 という値を bar_value に代入してみましょう。まず、90 は 80 以上か? -> はい。最初の比較が通り、対応するコードが実行され、赤く表示されます:
次に、60 を代入してみましょう。まず、60 は 80 以上か? -> いいえ。最初の比較に失敗し、次の比較にうつります。60 は 50 以上か? -> はい。対応するコードが実行され、黄色く表示されます:
最後に、48 を代入してみます。48 は 80 以上か? -> いいえ。最初の比較に失敗し、次の比較にうつります。48 は 50 以上か? -> いいえ。2 番目の比較に失敗し、上2つの条件にマッチしなかったため、else が実行され、緑色に表示されます:
ところで、Conky ウィンドウが常に前面に表示され、邪魔な感じを抱いているでしょう。そこで、.conkyrc の own_window_type を desktop に変更してください:
own_window_type = 'desktop'
このように変更すると Conky ウィンドウの枠まで消えるので、分かりづらいと思い dock に設定していました。
参考元: Using Lua scripts in conky (Part 06), (Part 07)
| Linux |
2018.03.27 Tuesday
Linux Mint 18.3 : オープンソースのパスワード管理ツール「Buttercup」 | 00:50 |
Buttercup とは
Buttercup はクロスプラットフォームに対応した無料でオープンソースのパスワード管理ツールです。これを使うとひとつのマスターパスワードを覚えてさえいれば、登録したアカウント全ての情報にアクセスできます。サードパーティ製のアプリからパスワードをインポートする機能やモダンな UI を備え付けています。市場にはすでにナイスなパスワード管理ツール(例: 1Password)はたくさんあります。しかし全員が全員、サブスクリプションをすぐに購入したいと思うわけではありません。そこで市販のツールよりはあまり開発が進んでいないアプリで対処せざるを得ないわけです。
主な特徴:
- オープンソース
- クロスプラットフォーム対応、Chrome や Firefox の拡張機能
- Dropbox や ownCloud などのクラウドサービスに保存可能
- 1Password (.1pif)、KeePass(.kdbx)、LastPass (.csv) といった著名なパスワード管理ツールからパスワードをインポート可能
- 安全 - 暗号化アルゴリズムに 256bit AES を使用
- シンプル - 使いやすいユーザーインターフェイス
- 無料 - ダウンロードするのも使うのも永遠に無料
インストール
Ctrl
+Alt
+T
を押して端末を起動します。端末へコマンドをペーストするには
Ctrl
+Shift
+V
を押します。公式サイトから deb パッケージをダウンロードします。GitHub のリリースページを見れば、AppImage や snap 形式でも配布されているのがわかります。ダウンロードした deb パッケージを gdeb 経由か dpkg コマンドでインストールしてください。i386 向けの deb パッケージがないところから察するに 64bit のみ対応なのでしょう:
wget https://github.com/buttercup/buttercup-desktop/releases/download/v1.6.0/buttercup-desktop_1.6.0_amd64.deb && sudo dpkg -i buttercup*deb
使い方
メニューから起動するとこのような画面が表示されます:
初回はアーカイブの作成とマスターパスワードを設定する必要が有ります。[ + ADD NEW ARCHIVE ] をクリックして [ NEW ARCHIVE FILE ] をクリックします:
アーカイブの保存先と名前を指定します。アーカイブのイメージとしてはアカウント情報一切が暗号化されて保存されているファイルと入った感じです:
マスターパスワードを設定します。Buttercup を起動するときは毎回入力する必要が出てくるので、メモするなり記録に残しておきましょう:
再度パスワードを入力するよう求められます。
パスワードが一致すると、このようなウィンドウが表示されます:
さっそくパスワードを登録していきましょう。パスワードを登録する前にグループを作成します。そのサイトがどういうサイトかで分類すると良いでしょう。今回は GMail のアカウントを登録してみます。なので、[ + NEW GROUP ] をクリックして新たに「Email」というグループを作成しました:
[ Email ] が選択されている状態で [ + ADD ENTRY ] をクリックしてアカウントを登録していきます:
パスワードはすでに作成済みならそのまま入力し、まだ作成していないようであればワンドアイコンをクリックするとパスワードを生成することが出来ます。いろいろ試してみてください:
Characters:
words:
もちろん、パスワードの下のバーはパスワードの強さを表しています。赤は弱く、緑は強いです。メモも追加することが出来ます。[ + ADD NEW FIELD ] をクリックして、ラベルと内容を記入してください:
最後に [ Save ] をクリックするのを忘れないようにします:
もしエントリーを削除したかったらエントリーを右クリックし [ Move to Trash ] をクリックしてください。もし作成したエントリーを再編集したい場合は [ Edit ] をクリックしてください:
[ File ] -> [ Import ] から他のパスワード管理ツールからパスワードをインポートすることが出来ます:
サイトにパスワードを入力する必要がでたときは、Buttercup を起動し、そのアカウントのエントリーを右クリックして [ Copy To Clipboard ] -> [ username ] または [ password ] をクリックしてペーストすれば OK です:
参考元: YouTube
| Linux |
2018.03.25 Sunday
隔週刊リナックス : [Final] #7 パソコン部屋/デスクトップ画面/ニュース/セール情報 | 05:19 |
Eye candy(見て楽しいもの)
パソコン部屋紹介
マルチディスプレイ、自作 PC、LED ライトは当たり前。そんなクールなパソコン部屋を imgur より紹介する企画。
シンプルイズベスト。無理しない程度にお金を掛けるならこれくらいが現実的でしょうか:
ワイドなモニターが 3 つ。かなりゆったり使えそうです:
ゲームが捗りそうです:
Linux デスクトップ画面紹介
Reddit にてシェアされている Linux デスクトップ画面を眺めて楽しむ企画。使われている Linux は Linux Mint に限定していません。
Manjaro with KDE
- Wallpaper: Unsplashed
- Dock: Latte Dock
- Fonts: San Francisco Display
- Icon theme: Dex_KDE
- Panel Theme: Aex Nomad
- Kwin Theme: Sierra Breeze
- Plasmoids (from left): active window control(just for application icon), application title, global menus, system tray (with increased spaces), event calendar and Uswitcher with a custom icon
Manjaro with bspwm+polybar
- Terminal: uRxvt
- Color Scheme (both Terminal and Vim): Tomorrow-Night, applied using base16-xresources , base16-shell and base16-vim
- Font: Dejavu Sans
- Monospace Font: Inconsolata
- Icons: Ionicons for Chrome icon and battery, Material Icons for the rest.
- Wallpaper: At Wallhaven
Debian with XFCE
- terminal: xfce4-terminal
- xfwm theme: Dr0ne2 - modified by me to match theme
- font: terminus
- bar: xfce4-panel
- wallpaper: HERE
ArchLabs with Openbox
- WM: Openbox
- Panel: Polybar
- Terminal: Termite
- Visualizer: cava
- Wallpaper: here
- terminal colors are here
- GTK theme is here
- Color swatches shell script is here
一期一会
DistroWatch から気になったディストロを紹介するコーナー。
Antergos
Antergos は Arch ベースのローリング・リリースモデルを採用したディストリビューションです。Sabayon(Gentoo ベースのディストロの一つ) がそれぞれのデスクトップ環境にひとつのディスクイメージを用意しているのに対して、Antergos はミニマルかフルの 2 種類のインストールディスクイメージを用意しています。これは ISO イメージをダウンロードする時間を短縮したいという要望があったからです。
最初、Torrent 経由で ISO イメージをダウンロードしようとしましたが、速度が 100kB/s 以下と遅かったので、直リンクからダウンロードしてみたら 2MB/s でした。フルサイズの ISO イメージのサイズは 1.9GB です。ライブメディアを作成した後、HDD から起動するか、ライブセッションを開始するか、端末画面に入るかどうかを聞かれます。ライブセッションを開始すると GNOME 環境が読み込まれました。
GNOME デスクトップ環境には画面の上部にパネルが配置され、メニューや時計やシステムトレイが有ります。画面の左側にドックが表示されており、よく使うアプリやシステムインストーラーのアイコンがあります。GNOME については横に置いて、早速インストールしていきます。
インストール
Antergos は Cnchi というグラフィカルなインストーラーを採用しています。ライブセッションが始まると、インストーラーは自身を更新し、いつでも Cnchi が最新版になるようにしてくれます。Ubuntu で採用されている Ubiquity というインストーラーやディストロに中立的なインストーラーである Calamares によく似ています。言語や地域、タイムゾーンなどを設定していきます。デスクトップ環境の選択画面には Cinnamon, Deepin, GNOME, KDE Plasma, MATE, Xfce がありましたが、Openbox やグラフィカルな要素がない端末ベースの Base も選べます。様々なデスクトップ環境を試したくてもここで複数のデスクトップ環境をインストールすることは出来ません。そこで Deepin を選びました。
次の画面ではどのアプリや機能を追加するか聞いていきます。この画面では Chromium や Firefox、OpenSSH サービス、Steam、PlayOnLinux、印刷サポート、ブルートゥース、アクセシビリティツールなどを追加できます。軽量に保ちたかったので Firefox、LibreOffice、ファイアウォールマネージャだけ選びました。パッケージミラーの優先順位を並べるかどうか、システムに任せるかどうかを聞かれます。
インストーラーは最後に、ディスクのパーティーションを切るかどうかを聞きます。暗号化するかや、LVM や ZFS ボリュームをセットするか、/home ディレクトリーを別にするかや、手動で区切るかが選べます。ファイルシステムは Btrfs, ext4, f2fs, XFS が選べます。ZFS のスナップショット機能が便利なため ZFS でパーティーションを作成することにしました。しかしインストール中にクラッシュしてリカバリー不能だったのでファイルシステムだけ ext4 に変えて同様の内容でインストールを試みてみたら成功しました。
第一印象
Antergos がインストールされたら、システムが起動しログイン画面が表示されたところで「An error was detected in the current theme that could interfere with the system login process.」というメッセージが表示されました。デフォルトのテーマを読み込むか、フォールバックしてテーマを読み込むか、キャンセルするか、どれか操作を選ぶ必要が有りました。フォールバックしてテーマを読み込んでみようとしましたが、同じエラーを吐いたので、デフォルトのテーマを読み込みました。2,3 秒画面が暗くなった後で、時計が表示され、ログインプロセスを開始できました。このテーマの読み込みエラーは起動するたびに起こりました。
初回ログイン時「Welcome, system updated successfully. Current edition: rolling.」というメッセージが全画面表示されました。Enter ボタンをクリックすると Deepin デスクトップ環境が表示されました。このメッセージはその後は表示されなくなりました。
Deepin には画面の下にドックが有り、そのうちの一つがアプリのアイコンを全画面で表示するメニューになっています:
その他には設定・通知パネルを画面右端に表示するアイコンも有ります:
ベース: Arch Linux
公式がサポートしているデスクトップ環境:
- XFCE4
- Cinnamon
- Deepin
- GNOME
- KDE Plasma
- MATE
- Openbox
ダウンロードページ: https://antergos.com/try-it/
気になったニュースを斜め読み
Linux 関係
(英語)Ubuntu 18.10 では LZ4 圧縮アルゴリズムのおかげで起動時間が短縮される - Softpedia
(訳)Canonical 社の Balint Reczey 氏が以前のリリースで使用されていた古い gzip 圧縮の代わりに Ubuntu の initramfs に新たに LZ4 圧縮を採用すると発表しました。LZ4 はロスレス圧縮アルゴリズムで、とても迅速に圧縮・解凍が行えます。
古いノートパソコンでテストしてみた結果、initramfs の解凍時間が 1.2 秒から 0.24 秒に縮まったと報告しています。initramfs の作成も、サイズは僅かに増えたにもかかわらず 2,3 秒の速度向上が有りました。
(訳)Canonical 社の Balint Reczey 氏が以前のリリースで使用されていた古い gzip 圧縮の代わりに Ubuntu の initramfs に新たに LZ4 圧縮を採用すると発表しました。LZ4 はロスレス圧縮アルゴリズムで、とても迅速に圧縮・解凍が行えます。
古いノートパソコンでテストしてみた結果、initramfs の解凍時間が 1.2 秒から 0.24 秒に縮まったと報告しています。initramfs の作成も、サイズは僅かに増えたにもかかわらず 2,3 秒の速度向上が有りました。
(英語)GNOME Shell にはかなり大きなメモリーリークがある - OMG! Ubuntu!(訳)多くの Ubuntu ユーザーが 17.10 で使用されている GNOME Shell 3.26.2 には隠れたメモリーリークがあることを報告しています。ウィンドウを切り替えたり、オーバービューを表示したりするなどのアニメーション時にメモリー使用量が増加するというのです。
残念なことに Ubuntu 18.04 LTS で使用される GNOME Shell 3.28 でもこの問題は残ったままだということです。
残念なことに Ubuntu 18.04 LTS で使用される GNOME Shell 3.28 でもこの問題は残ったままだということです。
Linuxカーネルのソースコードを機能とレイヤーで分類して表示してくれる「Linux kernel map」 - GIGAZINE
Linuxのカーネルは膨大な数のソースコードから成り立っており、どこに何の処理が書いてあるのかぱっと見当をつけるのにはかなりコードを読み込む必要があります。「Interactive map of Linux kernel」はそのソースコードを機能とレイヤーで分類して表示してくれるサイトということで、使い勝手を試してみました。
(略)
機能とレイヤーで主なソースを分類して表示してくれるので、「カーネルの〇〇の機能の部分だけ読みたい」という時にさっと場所を特定できて便利なマップとなっていました。
Linuxのカーネルは膨大な数のソースコードから成り立っており、どこに何の処理が書いてあるのかぱっと見当をつけるのにはかなりコードを読み込む必要があります。「Interactive map of Linux kernel」はそのソースコードを機能とレイヤーで分類して表示してくれるサイトということで、使い勝手を試してみました。
(略)
機能とレイヤーで主なソースを分類して表示してくれるので、「カーネルの〇〇の機能の部分だけ読みたい」という時にさっと場所を特定できて便利なマップとなっていました。
自作 PC 関係
ツクモ、“売れない地下アイドル”が自作PCに挑戦する漫画を公開 (取材中に見つけた○○なもの) - AKIBA PC Hotline!
ツクモのWebサイトで、自作PCをテーマにした漫画「売れない地下アイドルだけど自作PC作るよ!!」が公開されています。
この物語は、AICO(アイコ)、CUU(クー)、MEI(メイ)、RIE(リエ)の4人が、ボケとツッコミを交えながら、PCを組み上げるというコメディタッチの自作PC漫画。初めてPCを自作する場合、どこから手を付けたらいいのか悩むこともあると思いますが、この漫画を読めば、PC自作の手順をなんとなく把握することができます。
ツクモのWebサイトで、自作PCをテーマにした漫画「売れない地下アイドルだけど自作PC作るよ!!」が公開されています。
この物語は、AICO(アイコ)、CUU(クー)、MEI(メイ)、RIE(リエ)の4人が、ボケとツッコミを交えながら、PCを組み上げるというコメディタッチの自作PC漫画。初めてPCを自作する場合、どこから手を付けたらいいのか悩むこともあると思いますが、この漫画を読めば、PC自作の手順をなんとなく把握することができます。
サイズの最新CPUクーラー「超天」が発売、コンセプトは“虎徹のトップフロー版” - AKIBA PC Hotline!
超天は、4本の6mm径ヒートパイプと120mm冷却ファンを備えたトップフロー型CPUクーラー。同社の人気CPUクーラー「虎徹」のトップフロー版というコンセプトで開発されたという。
マザーボードへの取り付け方法はIntelがバックプレートが不要なプッシュピン方式、AMDがリテンションに固定するクリップ式となっており、AMD用のクリップは従来製品のものから硬度を変更し、再設計したものを採用したという。対応CPUソケットはIntel LGA775/115x/1366と、AMDのSocket AM2(+)/AM3(+)/AM4/FM1/FM2(+)で、LGA2011(v3)や2066、Socket TR4(Ryzen Threadripper)には対応していない。
超天は、4本の6mm径ヒートパイプと120mm冷却ファンを備えたトップフロー型CPUクーラー。同社の人気CPUクーラー「虎徹」のトップフロー版というコンセプトで開発されたという。
マザーボードへの取り付け方法はIntelがバックプレートが不要なプッシュピン方式、AMDがリテンションに固定するクリップ式となっており、AMD用のクリップは従来製品のものから硬度を変更し、再設計したものを採用したという。対応CPUソケットはIntel LGA775/115x/1366と、AMDのSocket AM2(+)/AM3(+)/AM4/FM1/FM2(+)で、LGA2011(v3)や2066、Socket TR4(Ryzen Threadripper)には対応していない。
ASCII.jp:KTUの自作キーボー道自分にとっての“究極のキーボード”を、どこかのメーカーが作ってくれるまで待つのはもう止めだ。好みの製品がなければキーボードを自作すれば良いのだ! そんな“キーボー道”の門を叩き、キーボード沼の深淵へと誘うための知識を紹介するのがこの企画。キーボード好きを自認するなら、ぜひ沼の最深部に挑んでいただきたい。
セール情報
Amazon タイムセール祭り Amazon.co.jpで,54時間限定セール「Amazonタイムセール祭り」が,2018年3月23日 18:00に始まった。セールは25日23:59までだ。
タイムセール祭りでは既報のとおり,PlayStation 4本体(ジェット・ブラック,HDD容量1TBモデル)に「FIFA 18」とDLCコードをまとめたパックや,SIMロックフリー対応のAndroidスマートフォンなどが割引価格で登場する予定。
そのほか,ゲーマー向けノートPCや,ディスプレイ,キーボード,ヘッドセット,キャプチャデバイスなども割引対象となっている。
タイムセール祭りでは既報のとおり,PlayStation 4本体(ジェット・ブラック,HDD容量1TBモデル)に「FIFA 18」とDLCコードをまとめたパックや,SIMロックフリー対応のAndroidスマートフォンなどが割引価格で登場する予定。
そのほか,ゲーマー向けノートPCや,ディスプレイ,キーボード,ヘッドセット,キャプチャデバイスなども割引対象となっている。
週一回更新に伴い「隔週刊リナックス」を休載します。不定期にやるかまたいつか復活します。それまで〜。
| Linux |
2018.03.23 Friday
CUI : Linux 使いの First Step | 01:43 |
オープンソースであるということ
オープンソースソフトのほとんどは無償で利用することができますが、それはいわゆるフリーソフトとどう違うのでしょうか。英語の free には「自由」と「無償」という2つの意味があります。もともと「フリーソフト」の「フリー」は「自由」の意味で使われていました。自由に利用でき、自由に改変し、自由に公開できる、ということです。しかし、「無料」の側面ばかり注目されるようになってしまったため「オープンソース」という言葉ができました。
オープンソースの定義として以下の10項目が定義されています:
- ソフトウェアを自由に販売したり無料で配布したりできること
- ソースコードを入手できること
- ソフトウェアを改良したり派生ソフトウェアを作成したりできること
- 作者のソースコードの完全性を維持すること
- 個人やグループを差別しないこと
- 利用分野に対して差別しないこと
- 再配布するときに追加ライセンスを必要としないこと
- ライセンスは特定の製品に依存しないこと
- 一緒に配布されるほかのソフトウェアを制限しないこと
- 技術的に中立であること
オープンソースソフトは無料で自由に使える代わりに、基本的にマニュアルやサポートが存在しません。いや、存在する場合も有ります。しかし多くは英語で書かれているものばかりか、英語を直訳した感じで読みにくいものばかりです(読みやすい場合も有ります)。なので、オープンソースソフトを使うには「自助努力」が大切です。「互いに助けあう」ことも大切です。オープンソースソフトは自分も育てあげていくんだという精神で使ってください。
その他にも、オープンソースを使う利点は
- 教育コストを削減できる -> 教育格差の是正
- コードが検証可能 -> 科学の「検証可能性」と相性が良い
- コピーしてどこへでも持ち運べる
キーワード
頻出中の頻出キーワードを説明します。
キーワード | 意味 |
コミュニティ | 特定のソフトの開発者とユーザーからなる自発的な集まり。 |
カーネル | OS の中核部分。ハードウェアを制御する。 |
パッケージ | ソフトは複数のファイルから構成されていますが、それらを個々にインストールするのは面倒です。インストールしやすくまとめたものがパッケージです。 |
ディストリビューション | カーネルだけでは使える OS にならないので、多数のソフトを組み合わせて配布(distribute)可能な形にしたもの。 |
シェル | コマンドを解釈するソフト。bash や zsh など多数存在します。「端末」はあくまで画面表示機能を提供するソフト。 |
Linux を導入する方法
大まかに 4 つの方法が有ります:
- USB メモリーに導入する
- ハードディスクを付け替える
- デュアルブート
- 仮想化マシン
空の HDD に Linux Mint をインストールする方法は USB メモリーにインストールする方法とほぼ変わりません。仮想化マシンにインストールする方法はいずれ書きたいと思います:
(追記 2018/03/31)書きました:
シェルをちょっと使ってみる
Ctrl
+Alt
+T
を押して端末を起動します。端末が立ち上がると以下のような画面が表示されます:shellingford@LinuxMint ~ $
これは環境によって表示される文字は異なります。「ユーザー名@コンピューター名 ワーキングディレクトリ$」という並びになっています。$ は # だったり、% だったりしますが、基本的に $ はユーザー権限を表し、# はルート権限を表しています。$ はプロンプトと呼ばれ「コマンドを入力してください」と待機していることを表します。
ところで、サイトを徘徊していると $ 付きで書かれるのが一般的です:
$ cal 2018
しかし、$ は入力する必要はありません。そこで初心者は $ も入力しエラーが返されること経験をします:
$: コマンドが見つかりません
では、なぜ $ まで書く必要があるのかというと、パソコンが表示する文字列とユーザーが入力する文字列を区別するために書かれます。例えば
ls
MEGA linux_signing_key.pub ダウンロード ピクチャ
New Unity Project out.png テンプレート ミュージック
Redmond-Themes sassc デスクトップ 公開
Unity-2017.3.0f1 snap ドキュメント
libsass vidlist.html ビデオ
とあるとどれを入力し、どれが表示される文字列か分かりません。そこで $ もつけて表記するのです:
$ ls
MEGA linux_signing_key.pub ダウンロード ピクチャ
New Unity Project out.png テンプレート ミュージック
Redmond-Themes sassc デスクトップ 公開
Unity-2017.3.0f1 snap ドキュメント
libsass vidlist.html ビデオ
これで「ls」が入力する文字で、それ以外はパソコンが表示する文字だとわかるのです。しかし、当ブログでは入力するコマンドは:
date
と表記し、表示されるメッセージは:
2018年 3月 11日 日曜日 14:58:47 JST
と表記することで、「初心者が誤って $ まで入力する」「コピペするとき $ が邪魔」「ユーザーが入力する文字列とパソコンが表示する文字列の区別がつかない」を解決しています。
引数とオプション
半角スペースを空けて与える情報を引数と呼びます。先ほど
cal 2018
というコマンドを示しました。2018 年のカレンダーを表示するコマンドですが、この例では「2018」が引数です。引数は複数与えることも出来以下の例では 2018 年の 3 月を表示します:
cal march 2018
3月 2018
日 月 火 水 木 金 土
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
-(ハイフン)をつける場合は「オプション」と呼ばれます。ディレクトリやファイルを表示する ls コマンドは -a (おそらく all の a です)をつけることで隠しファイルやディレクトリ(.から始まる)も表示することが出来ます:
ls -a
-l (おそらく long の l です)をつければ long な形式で詳細を表示します。主にパーミッションを調べるのに使います:
ls -l
オプションはまとめてこのように書けます:
ls -la
Tab キーと↑↓キーの利用
Tab
を押すと自動で補完できる場合が有ります。例えばワーキングディレクトリがホームディレクトリ(/home/ユーザー名/ のこと。表現方法は $HOME や ~ があります)の時に、ワーキングディレクトリを「ピクチャ」に変えたいとします。以下のコマンドをうちます:cd ピ
cd は change (working) directory を表しています。この状態で
Tab
を押すと残りの「クチャ/」まで補完されます。また↑
を押すと前回使ったコマンドを再現できます。このことはとても有用なので知っておくべきです。↑キーで履歴を遡るのが面倒な時
コマンドの履歴を 30 とか 40 とか遡らないといけないようなときは hitstory コマンドを使うべきです:
history出力例:
Shift
+PageUp
で一ページ分上にスクロールできます。Shift
+PageDown
で一ページ分下にスクロールできます。実行したいコマンドの番号を覚えたら ! を先頭につけて番号を入力します:!992
コマンドの履歴を検索
コマンドの履歴を遡る方法を 2 通り見てきました。1 つは矢印キー、1 つは history コマンドです。しかし、一行一行コマンドを見ていくのではなく、特定の文字列でコマンドの履歴を検索したい場合はどうしたら良いのでしょうか。
端末で
Ctrl
+R
を押してみましょう。コマンドの履歴を検索するモードに切り替わります:(reverse-i-search)`’:
このように表示されたら、探しているコマンドの一部を入力してみましょう。途中からでも構いません。文字を入力するに連れて、自動的にコマンドの履歴から検索されます。対応するコマンドが見つかれば、表示されます。
表示されているコマンドではない場合は、更にもう一回
Ctrl
+R
を押してみましょう。次にヒットするコマンドが表示されるはずです。これはちょうどテキストエディターで、Ctrl
+F
を使って検索しているような感じです。検索モードを終了するには←
もしくは→
を押します。Ctrl + C の利用
Ctrl
+C
を押すとコマンドの実行の途中で、その実行を強制終了させることが出来ます。sleep コマンドは指定した時間だけ処理を停止するコマンドです。以下のコマンドは 5 秒処理を停止させます:sleep 5
5 秒後にプロンプトに戻るはずです。次はこの処理中にキャンセルしてみましょう。上のコマンドを実行した後に、すぐ
Ctrl
+C
を押すとすぐにプロンプトに戻るはずです。コマンドの処理を途中でキャンセルしたい場合に活用してください。入出力リダイレクト
出力は通常モニターやプリンターに、入力は通常キーボードやマウスで行いますが、より抽象的に入出力を行うことでソフト同士のやりとりが容易になります。まず最初に画面以外に出力できることを経験してみましょう:
echo HelloWorld! > output.txt
更に、cat コマンドで output.txt の中身を見てみます:
cat output.txt
出力例:
HelloWorld!
echo の出力先を画面からファイルに変更することが出来ました!また、同じテキストファイルに違う内容を入力してみましょう:
date > output.txt
出力してみます:
cat output.txt
出力例:
2018年 3月 11日 日曜日 16:45:44 JST
date コマンドの出力先がテキストファイルに変わりました。しかし、HelloWorld! が消されてしまいました。つまり上書きされたのです。追記したい場合はどうしたらいいでしょうか。>> と 2 回続けます:
date >> output.txt
出力してみます:
cat output.txt
出力例:
2018年 3月 11日 日曜日 16:45:44 JST
2018年 3月 11日 日曜日 16:48:24 JST
追記できたのがわかります。次はファイルから出力する方法を見ていきましょう。bc コマンドは計算を処理するコマンドです。Linux Mint には標準で入っています。まずは 1+2 と書かれたテキストファイルを用意しましょう:
echo 1+2 > output.txt
この式を bc コマンドに渡します:
bc < output.txt
出力例:
3
このように、出力先をファイルに変えることを「出力リダイレクト」と言い、入力元をキーボードからファイルに変えることを「入力リダイレクト」と言います。
パイプの利用
上記の例では echo と出力リダイレクトを使って output.txt を生成し、内容を書き込み、入力リダイレクトを使って bc コマンドにファイルから式を渡して、計算結果を画面に表示させました。言わば output.txt を中間ファイルとして使っているわけですが、この中間ファイルを生成させずに直接コマンドの出力を別のコマンドの入力として渡す方法が有ります。それがパイプという仕組みです。以下のコマンドを実行してみてください:
echo 1+2 | bc
出力例:
3
パイプを使うことで処理を高速化することが出来ます。
バックグラウンドで実行
コマンドの最後に「 &」を追加して実行すると画面外でそのコマンドが実行されます。例えば sleep コマンドは指定した時間が経つまで、プロンプトに戻りませんが、「 &」を末尾につけるとすぐプロンプトに戻ります:
sleep 10 &
画面内に戻したい場合は fg (foreground)コマンドを使います:
fg
逆に、画面内で実行していて、途中から画面外(バックグラウンド)で実行したくなる場合も有ります。その時はコマンドを実行した後
Ctrl
+Z
を押してコマンドの実行を停止させた後、「bg」と入力することでバックグラウンドで再開できます:sleep 10
Ctrl
+Z
を押して停止させた後:^Z
[1]+ 停止
bg 1
という風に「bg ジョブID」で再開できます。fg コマンドを使えば sleep 10 が裏で実行されているのがわかるはずです:
fg
ワンライナーでプログラミング
プログラミングというと Java や C 言語という、いわゆる「プログラミング言語」を使って作る、大掛かりなものを連想しがちですが、ここでのプログラミングはシェル上で一行のコマンドとして実行する小さなプログラムです。このようなプログラミングスタイルを「ワンライナー」と呼んでいます。すでに我々はワンライナーを経験しています。それはこれです:
echo 1+2 | bc
このようにいくつかのコマンドを | などを利用してつなげていきます。
変数
プログラミングを始めるにあたり、最初に登場するのが変数です。例にもれずここでも最初に変数を取り上げます。シェルでの変数以下のように定義します:
x=3
使うときは $ を変数名の前につけます:
echo $x
コマンドの出力を変数に代入することも出来ます。コマンドをバッククォートではさみます:
d=`date`
echo $d
上の二行のコマンドは一行にまとめてこう書くことも出来ます:
d=`date`;echo $d
出力例:
2018年 3月 11日 日曜日 17:58:58 JST
しかしながら、バッククォートで挟むやり方よりも $(コマンド) 形式のほうが推奨されています。他人のスクリプトを読むときはバッククォートでコマンドを実行しているんだなとわかる程度で、実際に自分でスクリプトを書く場合はこちらの形式に従いましょう:
d=$(date)
echo $d
ネスト(入れ子)もできます:
echo "hello1 $(echo hello2 $(echo hello3))"
出力例:
hello1 hello2 hello3
シェルにはシェル変数が用意されています。たとえば、コマンドの実態を探すディレクトリが格納されている PATH 変数やデフォルトのシステム言語がセットされている LANG 変数、0 から 32767 までの整数をランダムで出力する RANDOM 変数、ホームディレクトリのパスが格納されている HOME 変数などが有ります。これらも利用するときは変数名の前に $ をつけます:
echo $LANG
出力例:
ja_JP.UTF-8
繰り返し制御
シェルでは繰り返しに for 文を使います。フォーマットは以下のとおりです:
for i in {1..5}; do 繰り返したいコマンド; doneあるいは for((i=1;i<=5;i+=1)); do 繰り返したいコマンド; doneどちらも同じ結果です。{1..5} は 1 から 5 まで繰り返す書き方で、{2..10} とかでも構いません(2 から 10 まで一個ずつ繰り返します)し、((i=1;i<=5;i+=1)) は ((i=2;i<=10;i+=2)) とかでも構いません。i+=2 でどれだけ増やしていくかを指定しています。2 なので 2 4 6 8 10 と増えていきます。
ファイルも扱うことが出来、例えばワーキングディレクトリの中で txt ファイルのみを表示したい場合はこのような書き方になります:
for i in *.txt; do echo $i; done*.txt にマッチしたファイルの一つ一つが変数 i に代入され、それを echo $i で出力しています。*.txt があるだけ繰り返し行われます。
出力例:
output.txt
awk の利用
awk は空白や行で区切られたテキストを処理するためのコマンドです。ワンライナーで使うととても便利なコマンドです。例えば以下のコマンドを実行してみてください(注意すべてき点はバッククォートではなくシングルクオートであるということです):
echo 1 2 | awk '{print $1+$2}'
出力例:
3
まず echo で出力するデータをパイプで awk に渡しています。$1 には 1 が格納され、$2 には 2 が格納されています。print は awk の持つ「データを表示するコマンド」です。シェルの持つコマンドではありません。なので awk '{}' の中の世界はシェルとまた別の世界だと思ってください。
応用
ここで実用的な一行プログラムを作成したいと思います。ワーキングディレクトリ内の png ファイルをすべて jpg ファイルに変換します。まず ImageMagic をインストールしてください:
sudo apt install -y imagemagickパスワードの入力が求められるので自分がログイン時に使用するパスワードを入力し
Enter
を押します。続いて、適当にワーキングディレクトリに png 形式の画像を適当にダウンロードしてください。その後次のコマンドを実行します:
ls *png | awk '{printf "convert %s %0.5d.jpg¥n",$1,NR}' | sh
もし、ファイル名にスペースが入っているとうまく処理できませんが、これでワーキングディレクトリ内のすべての png 形式の画像が連番がふられた jpg 形式の画像に変換されます!
少し説明を加えると、
ls *pngでワーキングディレクトリの png ファイルを出力しています。その出力結果を awk に流し、一行一行'{}' の中のコマンドが実行されます。printf は画面に表示するコマンドです。printf "" の中の文字列を出力します。%s は受け渡されたファイルをそのまま出力します。%0.5d は頭部が 0 で埋まった 5 桁の整数を出力します。残りの $1 は ls *png で流れてきた png 形式のファイル名が格納されていきます。NR は行数が記録されていきます。これらの $1 と NR がそれぞれ %s と %0.5d に代入されていくのです。最後に sh で出力したコマンドを実行していきます。
次のコマンドでは html 形式で書かれたテキストファイルの内、表示される文字数を表示します。実行する前に output.txt に適当に html を記述してください:
tr -d "¥n" < output.txt | tr -d " " | sed -e 's/<[^>]*>//g' | wc -m
tr コマンドは(おそらく trim から取られていると思います)文字の置換や削除を行うコマンドです。-d オプションを指定することで指定した文字(ここでは改行。改行は ¥n で表します)を削除します。output.txt に書かれた文字列からまず、改行を取り除きます。これは改行も1文字とカウントされるからです。更にパイプで再度 tr コマンドを使って「 (半角スペース)」を削除しています。次に結果を sed に流しています。sed も与えた正規表現で文字列を置換したり削除したりするためのコマンドです。ここでは html タグを取り除いています。最後に文字数をカウントする wc コマンドに結果を流しています。-m をオプションをつけることでマルチバイト文字(日本語など)を 1 文字とカウントします。これで自分の書いた原稿がどれくらいの文字数がわかります。
終わりに
いかがでしたか。GUI で行う操作は直感的である反面自動化がしにくいです。GUI で行う操作は習得に多少の時間が必要ですが、なれると素早くできる利点があります。Unix の設計思想の中に「各プログラムが一つのことをうまくやるようにせよ」という言葉があります。echo や ls 自体は「これだけで一体なんの役に立つの?」という感じのコマンドを組み合わせることで強力な一行プログラムになることを学びました。
最後にちょっとだけ。以下のコマンドはワーキングディレクトリをミュージックに移し、ネットからビープ音の音源をダウンロードしそれを beep.wave と名づけて保存するコマンドです:
cd ミュージック && wget -O beep.wav http://anime.geocities.jp/combatbutler_combatbutler/music/A-Tone-His_Self-1266414414.wav
その後、次のコマンドを実行してみてください。3 分後に指定したファイルを鳴らす一行プログラムです:
sleep 180 && aplay beep.wavカップラーメンの時間を測るのにちょうどいいタイマーの完成です :P
参考元 : 『入門者のLinux』『1週間で LPIC の基礎が学べる本』
| Linux |
2018.03.18 Sunday
Linux Mint 18.3 : Linux ユーザーなら Git を活用しよう | 01:19 |
Git は Linux の生みの親である Linus Torvalds 氏によって開発された、オープンソースの分散バージョン管理システムです。Git によって Linux コミュニティは発展し続け、2 千万行を超えたカーネルコード(※1)は毎日約 1 万行が追加されている(※2)と言います。4.x シリーズでは 63 日から 77 日置きにリリースされています。これを可能にしているのは部分的には Git のおかげでもあります。
自分たち Linux ユーザーにとっては Git は何かをインストールするために頻繁に使うことになります。また、Linux Mint をインストールした際に、インストール後の諸々の設定を自動化するためのシェルスクリプトを書いたりして Git で管理することもあるでしょう。
今回は
- GitHub からソースを取得・更新する方法
- BitBucket を個人で活用する方法
- 簡易的な GUI アプリで使う方法
sudo apt install -y git
GitHub からソースを取得・更新する
ソースを取得
オープンソースソフトはしばしば GitHub にて公開されています。GitHub からソースを取得するには clone サブコマンドを使います。クローン、つまりコピーするということです:
git clone https://github.com/LinxGem33/OSX-Arc-White.git OSX-Arc-White
git clone のあとに GitHub の URL、その後に保存先のディレクトリ名を指定します。保存先のディレクトリ名は省略でき、どのみち「OSX-Arc-White.git」の「OSX-Arc-White」部分がディレクトリ名に使われます。
ソースの更新
「OSX-Arc-White」を更新したいとしたらワーキングディレクトリを「OSX-Arc-White」に移してから git pull コマンドを使います:
cd ~/OSX-Arc-White
git pull https://github.com/LinxGem33/OSX-Arc-White.git
BitBucket を個人で活用する
GitHub は公開するのであれば無料ですが、非公開でプライベート利用の場合は有料です。一方、BitBucket は公開するのであれば有料ですが、非公開であれば無料です。個人利用と親和性が高いのは BitBucket の方です。特に理由がなければ個人利用では BitBucket のほうがおすすめです。
まずはアカウントを作成しておきましょう。
追記
米Microsoft傘下の開発者向けのソースコード共有サービスGitHubは1月7日(現地時間)、無料ユーザーでもプライベートリポジトリを使えるようにしたと発表した。なので、BitBucket でなく GitHub でも無料でプライベート向けに使えるようになりました。
ITmedia NEWS(魚拓)
空のリポジトリから始める
BitBucket のアカウントを作成したら、ログインし左側にある [ + ] をクリックしましょう:
続いて [ Repository ] :
必要な項目を記入して新規リポジトリを作成します:
自分のアカウントのリポジトリのページにアクセスれば、リポジトリの URL が表示されるのでコピーしておきます:
git clone https://_Shellingford_@bitbucket.org/_Shellingford_/mybitbucket.git
パスワードを求められます:
Password for 'https://_Shellingford_@bitbucket.org':
パスワードを入力したらリモートリポジトリがローカルにコピーされます:
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
Checking connectivity... done.
テキトーに編集します。編集がおわったら、ローカルリポジトリをリモートリポジトリに反映しましょう。
リモートリポジトリに変更を反映
Git では:
- ファイルを編集
- ステージに追加
- コミットする(=ローカルリポジトリに変更を反映する)
- プッシュする(=リモートリポジトリに変更を反映する)
- まずは .git ディレクトリがあるディレクトリにワーキングディレクトリを移動します:
cd mybitbucket
- 以下のコマンドで変更があったがコミットされていないファイルやディレクトリを見ることができます。赤字で表示されます:
git status
- ファイルやディレクトリを追加した場合は以下のコマンドを実行してステージングエリアに追加します:
git add .
- コミットします:
git commit -m "コメント"
- するとこのようなエラーが出るかもしれません:
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address
というわけで、自分の情報を設定ファイルに追加します:
git config --global user.email "登録したメアド"
git config --global user.name "登録したユーザー名"
- 最後に push します:
git push https://_Shellingford_@bitbucket.org/_Shellingford_/mybitbucket.git master:master
- 毎回毎回、リポジトリの URL を入力するのは面倒なので、リポジトリの URL にアダ名をつけます。ここでは https://_Shellingford_@bitbucket.org/_Shellingford_/mybitbucket.git に origin というアダ名をつけています。このアダ名は何でも良く「miku」とかでも構いません:
git remote add origin https://_Shellingford_@bitbucket.org/_Shellingford_/mybitbucket.git
これで次回から https://_Shellingford_@bitbucket.org/_Shellingford_/mybitbucket.git に push するのに origin という名前が使えます:
git push origin master
自分がどのリポジトリの URL にどんなアダ名をつけているかは以下のコマンドで確認できます:
git config --list
出力例:
remote.origin.url=https://_Shellingford_@bitbucket.org/_Shellingford_/mybitbucket.git
その後の利用
あとは
- ファイルの編集
- git commit -m "コメント"
- git push origin master
の繰り返しです。ファイルやディレクトリを追加した時だけ
git add .
を忘れないようにします。
ファイルを削除したいときは rm サブコマンドを使います。git rm ではなく普通にファイラーから削除した場合でも git rm は実行する必要が有ります:
git rm README.md
git commit -m "README.md削除"
git push origin master
特定のコミットの状態まで戻るには、まず:
git log
出力例:
commit 599694edcae86138fc831136282b6e775ea844eb
Author: shellingford
Date: Wed Mar 14 23:24:54 2018 +0900
README にテスト追記
Signed-off-by: shellingford
で戻りたいコミット ID をクリップボードにコピーし、checkout します:
git checkout 599694edcae86138fc831136282b6e775ea844eb README.md
まとめ図
Git を GUI で使う
git-gui は Git を Tcl/Tk で GUI アプリ化したツールです。git gui を使えばユーザは新しくコミットしたり、既存のリポジトリに変更を加えたり、ブランチを作成したり、ローカルマージを実行したり、リモートリポジトリを取得したり、リモートリポジトリにプッシュしたりすることを GUI で行えるようにすることで、リポジトリに変更を加えやすくするツールです。
git とは異なり、git gui はコミットの生成と一つのファイルのアノテーションに焦点を当てているため、プロジェクト履歴は表示できません。ただし、git gui 内から gitk(リポジトリブラウザー) セッションを開始するためのメニューは用意されています。
インストールするには:
sudo apt install -y git-gui gitk
起動するには:
git gui
まずは、上述の「BitBucket を個人で活用する」の「空のリポジトリから始める」の
git clone https://_Shellingford_@bitbucket.org/_Shellingford_/mybitbucket.gitでローカルリポジトリを作成したことを前提に話を進めていきます。
- [ 既存のリポジトリを開く ] でダウンロード(clone)したディレクトリを指定しましょう:
- [ 編集 ] -> [ オプション ] から署名を変更できます:
- ファイルに変更を加えたら [ 再スキャン] します:
- [ 変更をコミット予定に入れ ] ます:
- [ 署名 ] でコメントを記入したら:
- [ コミット ] -> [ プッシュ ] します:
- パスワードを入力し:
- 「成功」と表示されれば OK です:
- これで BitBucket にアクセスすればリモートリポジトリでも変更が反映されているがわかります:
前のバージョンに戻りたい場合は:
- [ リポジトリ ] -> [ ブランチmasterの履歴を見る ] でコミット ID をコピーします:
- [ ブランチ ] -> [ チェックアウト ] で表示される画面の [ リビジョン式 ] に先程のコミット ID をペーストします:
- [ チェックアウト ] すればローカルリポジトリが元のバージョンに戻ります。
- やっぱり最新のバージョンに戻りたい場合は [ ローカルブランチ ] の [ master ] を選べば OK です:
※1)増え続けるLinuxカーネルコード、2016年第1四半期の総行数は2100万超 | マイナビニュース
※2)Linuxが誕生25周年、24日にはリーナス・トーバルズ氏が基調講演 - ITmedia NEWS
| Linux |
2018.03.16 Friday
Linux Mint 18.3 : メモリー(RAM)の規格・周波数・全容量・型番・空き容量・エラーの有無を確認する | 00:23 |
ランダムアクセスメモリ、いわゆる RAM はどのパソコンでも非常に重要なパーツです。プリインストールされた設定済みの Linux マシンを購入したり、Virtual Private Server を利用していたりすれば、RAM の全体の容量、使用中の RAM の容量、RAM のクロック周波数、RAM の規格が知りたい時が有ります。この記事では、Linux Mint で RAM に関する情報を調べ、RAM にエラーが起きてないかどうかを調べる方法をシェアしたいと思います。
RAM の全体の容量と空き容量を調べる
次のコマンドを使うことで、どれくらい RAM が搭載されているか調べることが出来ます:
free -h
下のスクリーションの枠で囲った部分が、搭載されているメモリーの全体の容量です。見てわかるように 15GB だとわかります(一応 8GB の 2枚で 16GB のはずですが):
free コマンドはどれくらい RAM を使用しているか、どれくらいまだ空きスペースがあるかも調べることが出来ます。下のスクリーンショットを見ての通り、1.8GB が使用中で、13GB が利用可能です:
RAM の規格とクロック周波数と型番を調べる
RAM には規格があり、DDR1、DDR2、DDR3、DDR4 と世代が進んでいくにつれて、その転送速度は向上していっています。DDR は Double Data Rate の略で、主流は執筆時点では DDR4 です。他にも、SDRAM か DRAM かという違いも有ります。最近のメモリーモジュールには様々なプロファイルが有り、このプロファイルには RAM の動作速度が定義されています。Linux Mint では次のコマンドを使って、搭載されている RAM の規格やクロック周波数を確認することが出来ます:
sudo dmidecode --type memory | less
下のスクリーンショットのように表示されます。たくさんの情報が有りますが、
↑
↓
でスクロールできます:少し下の方を見ると [ Type ] 欄に RAM の規格が DDR4 であることがわかります。[ Speed ] の箇所を見ればクロック周波数も調べることが出来ます:
[ Part Number ] には型番が表示されています:
Q
を押すとプロンプトに戻ります。エラーの確認
半導体が使われているパーツはとてももろいので、時には、RAM がエラーを吐くことがあるかもしれません。そこで、エラーが起きてないか調べる方法が有ります。memtester を使えば、エラーを確認できますが、デフォルトではインストールされていません。標準リポジトリーに含まれているので apt でインストールしましょう:
sudo apt install -y memtester
memtester はコマンドラインツールです。端末から実行します。書式は次のようになります:
sudo memtester SIZE ITERATIONS
SIZE にはテストするために割り当てるメモリーの容量を、ITERATIONS にはテスト回数を指定します。デフォルトではそれぞれ、メガバイト、無限回が設定されています。SIZE には Bytes の B、Kilobytes の K、Megabytes の M、Gigabytes の G が使えます。例えば、100MB をテスト用に割りあてて、2回テストを繰り返したい場合つぎのようになります:
sudo memtester 100M 2
最後に次のコマンドを実行して 0 が返されたらメモリーは正常です。$? は前回のコマンドの終了状態が保持されています。0 は正常終了を表します:
echo $?
0 以外の可能性としては:
- x01: メモリーの割り当てかロックミス、もしくは呼び出しエラー
- x02: スタックアドレステスト中にエラー
- x04: 他のテスト中にエラー
参考元: Linux Hint
| Linux |
2018.03.13 Tuesday
Linux Mint 18.3 : カバーフロー風の画像を簡単に作成「Screenie」 | 00:18 |
Screenie とは
Screenie はスクリーショット画像を編集するためのツールで、Linux だけでなく Windows や macOS X でも利用できます。スクリーショットを取る機能はありません。画像を組み合わせて(最大3枚)カバーフロー風の画像を作成することが出来ます。
主な特徴:
- 操作がシンプル
- D&D による画像の追加に対応
- 出力形式は PNG のみ
インストール
Ctrl
+Alt
+T
を押して端末を起動します。端末へコマンドをペーストするには
Ctrl
+Shift
+V
を押します。次のコマンドを実行します:
sudo apt install -y screenie-qt
使い方
メニューから起動するとこのような画面が表示されます:
[ Instructions ] ウィンドウに操作のすべてが書かれています。ローカルから画像を D&D で追加することが出来ます(ブラウザから直接 D&D できると書かれていましたが出来ませんでした)。各画像のプロパティはスライドをずらすことで設定します。チェックを外すと、その設定が無効になります。いい感じに編集し終わったら:
ウィンドウを右クリックすることで保存先が聞かれます:
完成例(割と余白が余るので GIMP で余白は取り去る必要が有ります):
極めてシンプルなツールですが、ブロガーにとっては反射系の画像を手軽に作成するのに便利です。
参考元: mintguide.org
| Linux |
2018.03.11 Sunday
隔週刊リナックス : #6 パソコン部屋/デスクトップ画面/ニュース/セール情報 | 06:17 |
Eye candy(見て楽しいもの)
パソコン部屋紹介
マルチディスプレイ、自作 PC、LED ライトは当たり前。そんなクールなパソコン部屋を imgur より紹介する企画。
ビューティフォー:
ワイドモニター2画面。ウィンドウを左右に並べやすいですし、ウェブサイトや電子書籍は基本縦長なので、縦置きにするとすごく見やすいでしょう。落ち着いた大人の雰囲気がまたいいです:
どうせならワイドモニター二枚にすればいいのにと思うのですがどうでしょうか:
Linux デスクトップ画面紹介
Reddit にてシェアされている Linux デスクトップ画面を眺めて楽しむ企画。使われている Linux は Linux Mint に限定していません。
Linux Mint with Cinnamon
- GTK theme / window borders / controls: Adapta
- Desktop: Adapta Nokto
- Icon theme: Papirus Adapta
- Mouse cursor: Breeze Hacked
- Wallpaper: Hatsune Miku
Arch with Xfce
- Wallpaper: Here
- GTK Theme: Arc Dark
- Icons: Papirus
- Dock: Plank with Arc-Plank theme
- Terminal Colors: Nord
- Terminal Font: Hermit
- Global Menu: vala-panel-appmenu
Manjaro with i3
- Terminal: urxvt
- File Manager: Ranger
- Terminal Font: Terminus
- Background: here
Linux Mint with Xfce
- WM Theme: Greybird-compact
- GTK: Oomox-Tomorrow-Dark-Eighties created with Oomox
- Icons: Modified Mint-X-Aqua-Dark
- Terminal: Terminology with Tomorrow Dark Eighties color scheme
- Wallpaper: Angry girl with blue hair
- Other: Cava, tty-clock
Arch with i3-gaps
- WM: i3-gaps with the WIP vertical dock patch
- Wallpaper: Made by adpn(1), AntiVVIBU(9), matsumayu(2), ncoll36(3, 4, 5, 6, 7, 8)
- GTK: Arc
- Icons: Adwaita
- Dock: GLava, tint2
- Other: i3-wpd, libaosd, rofi
一期一会
DistroWatch から気になったディストロを紹介するコーナー。なのですが、Make Tech Easier に Arch 系ディストロの紹介があったのでこちらを採用しました。
Anarchy Linux
Anarchy Linux は独自のディストリビューションというよりもむしろ Arch Linux のラッパーです。Linux Mint(Anarchy) と Ubuntu(Arch) の関係に似ています。Anarchy Linux の主な特徴はそのインストーラにあります。Arch Linux 自体には適切なインストーラがありません。Anarchy はこの問題を解決してくれます。Ubuntu のような主要なディストリビューションと同じように、インストールプロセス全体を簡単にしてくれる強力な端末ベースのインストーラを提供します。
Anarchy が他と一線を画すのが、通常デフォルトでインストールされているものが入っていないことです。その代わりに、Anarchky はほとんどの人がカスタマイズするようにシステムを構築します。例えば、デフォルトで ZSH を提供してくれます。デフォルトブラウザは Chromium です。すぐに使用できるテキストエディタは Vim です。Anarchy を使えば必要としないものに時間を浪費することはありません。必要なものだけを提供してくれます。
ISO イメージはAnarchy の公式サイトからゲットできます。USB メモリーか DVD に入れて起動すればブートメニューが表示されます。
デフォルトの項目を選べば、ライブデスクトップが起動します。これがインストール後のデスクトップでもあります(選択するデスクトップ環境によって多少異なります)。
インストーラーは(おそらくデスクトップにある [ Install ] アイコンをクリックすれば始まります)、端末ベースっぽさを感じます。しかし、必要十分です。
インストーラーはまず言語を聞いてきます。その後、インストールプロセスを続行するか聞いてきます。
HDD のパーティションを区切る
HDD のパーティションメニューはかなり標準的なものです。お望みであればパーティションを自動で区切ってくれます。自分自身で区切ることも出来ます。パーティションを区切るのにコマンドラインツールも使えます。慣れ親しんだ方法が選べます。
アプリの選択
Anarchy のアプリの選択プロセスは素晴らしいです。匹敵するのは Fedora のものくらいです。このような機能がたいていのディストリビューションでは実装されていないのは残念です。このプロセスはデスクトップとして使うのかサーバーとして使うのかに答えてから始まります。
デスクトップを選んだら、デスクトップ環境を選ぶ画面が表示されます。
デスクトップ環境を選んだら、追加したいアプリを選べます。このインストーラーにはカテゴリー分けされた膨大なソフトのメニューがあります。
ここで最初のインストールでよく使うアプリをインストールする機会を与えてくれます。
ユーザーの設定
最後に、設定事項をいくつか聞かれます。ここではユーザーの設定を行います。
ユーザーの作成画面はとてもシンプルです。複数のユーザーが作成でき、どのユーザーに sudo の利用を許可するか選べます。
インストールが終われば再起動するかどうか聞かれます。再起動すれば利用可能な状態になります。
実際に使用する
Anarchy を実行してみて特筆すべきことはあまりありません。結局、Arch Linux なので、Arch Linux と同じ挙動を示します。
大きく違う点は設定です。Arch ではすべての設定を自分がしないといけません。時間がかかるし、システムを台無しにしてしまいかねません。Anarchy では最初から適切に設定されおり、異常が起きた後でも設定を変更するのは容易です。
Anarchy は Arch の良い側面を全て持っています。Arch の最新のリポジトリが使える Pacman パッケージマネージャーもありますし、AUR も使えます。Arch Wiki だって有用です。
ベース: Arch Linux
対応デスクトップ環境:
- Anarchy Linux Custom XFCE4
- Awesome
- Cinnamon
- Deepin
- DWM DynamicWM
- Enlightenment
- Fluxbox
- Gnome
- I3
- KDE/Plasma
- LXDE
- LXQT
- Mate
- bsp
- Openbox
- Windoaker
- xmonad
- XFCE4
サポート: ローリング・リリースモデル
ダウンロードページ: Anarchy-Linux
気になったニュースを斜め読み
Linux 関係
(英語)Ubuntu 16.04.4 LTS リリース (訳)何十億ものパソコンなどのデバイスに影響を与えているメルトダウンとスペクターによるセキュリティ上の脆弱性の影響で数週間遅れてしまった Ubuntu 16.04.4 LTS がとうとうリリースされました。Ubuntu 16.04.3 LTS あるいはそれ以前のバージョンを使用しているユーザーも利用できます。
予想どおり、Ubuntu 16.04.4 LTS には Ubuntu 17.10(Artful Aardvark)のものをベースにした、新しいカーネルとグラフィックススタックが組み込まれています。これには、Linux 4.13 カーネルと Intel および AMD GPU 向けの Mesa 17.2.2グラフィックススタックが含まれます。
予想どおり、Ubuntu 16.04.4 LTS には Ubuntu 17.10(Artful Aardvark)のものをベースにした、新しいカーネルとグラフィックススタックが組み込まれています。これには、Linux 4.13 カーネルと Intel および AMD GPU 向けの Mesa 17.2.2グラフィックススタックが含まれます。
2018年版Linuxディストリビューション10選 | マイナビニュースLinux Mint - 初心者にとってベストなLinuxディストリビューション
Ubuntu MATE - 古いハードウェアで利用する際にベストなLinuxディストリビューション
Kali Linux - ハッキング技術習得においてベストなLinuxディストリビューション
Steam OS - ゲーム用途でベストなLinuxディストリビューション
Debian - プログラミングの用途でベストなLinuxディストリビューション
elementary OS - 最も美しいLinuxディストリビューション
Ubermix - 子供が利用する上でベストなLinuxディストリビューション
Tails - プライバシーと匿名性に優れたLinuxディストリビューション
CentOS - サーバ用途でベストなLinuxディストリビューション
Ubuntu - パワフルなPCとして使う際にベストなLinuxディストリビューション
Ubuntu MATE - 古いハードウェアで利用する際にベストなLinuxディストリビューション
Kali Linux - ハッキング技術習得においてベストなLinuxディストリビューション
Steam OS - ゲーム用途でベストなLinuxディストリビューション
Debian - プログラミングの用途でベストなLinuxディストリビューション
elementary OS - 最も美しいLinuxディストリビューション
Ubermix - 子供が利用する上でベストなLinuxディストリビューション
Tails - プライバシーと匿名性に優れたLinuxディストリビューション
CentOS - サーバ用途でベストなLinuxディストリビューション
Ubuntu - パワフルなPCとして使う際にベストなLinuxディストリビューション
Linuxディストリビューション「Kali Linux」が“ストア”から導入可能に - 窓の杜 米Microsoftは5日(現地時間)、「Kali Linux」が“Microsoft ストア”から導入できるようになったことを公式ブログ“Windows Command Line Tools For Developers”で発表した。“ストア”から導入できるLinuxディストリビューションは、これで4つとなった。
自作 PC 関係
値上がり傾向のグラフィックスカード 意外な理由が中国にある? (1/4) - ITmedia PC 価格高騰や在庫不足の理由には、世界的なマイニングブームによる需給バランスの問題の他に、GPUとメモリの供給不足があることは以前から指摘されてきた。が、最近はさらにコンデンサ不足のウワサも広がっている。
あるショップは「中国で電動スクーターが爆発的にヒットしたことでコンデンサがそっちに流れているみたいなんですよね。だから、PCパーツというよりPCに使われるコンデンサ自体が減っているらしいです。コンデンサの価格なんて、ケタ違いのレベルで高騰していると聞きますし」と話していた。
そうなるとグラフィックスカードだけでなく、電源ユニットやマザーボードなど他のパーツの流通や価格にも影響が出てきそうだが、「今はぎりぎりこらえている状況」(同だという。
あるショップは「中国で電動スクーターが爆発的にヒットしたことでコンデンサがそっちに流れているみたいなんですよね。だから、PCパーツというよりPCに使われるコンデンサ自体が減っているらしいです。コンデンサの価格なんて、ケタ違いのレベルで高騰していると聞きますし」と話していた。
そうなるとグラフィックスカードだけでなく、電源ユニットやマザーボードなど他のパーツの流通や価格にも影響が出てきそうだが、「今はぎりぎりこらえている状況」(同だという。
(英語)AMD 第二世代 Ryzen 7 2700X 「Pinnacle Ridge」スペックリーク (訳)XFR 2.0を使用すれば 4.2GHz までブースト可能。
Futuremark の 3DMark データベース内に流出した情報によれば Ryzen 7 2700X は 8コアと16スレッドと表示されている。プロセッサには、16 MB の L3 キャッシュと 4 MB の L2 キャッシュが搭載されており、合計で最大 20 MBの RAM を搭載している。チップの TDP は 95W。これは XFR の上限がより高い X であるためだ。プロセッサーはRyzen 7 1700X に似ているが、クロック数が向上されている。
Futuremark の 3DMark データベース内に流出した情報によれば Ryzen 7 2700X は 8コアと16スレッドと表示されている。プロセッサには、16 MB の L3 キャッシュと 4 MB の L2 キャッシュが搭載されており、合計で最大 20 MBの RAM を搭載している。チップの TDP は 95W。これは XFR の上限がより高い X であるためだ。プロセッサーはRyzen 7 1700X に似ているが、クロック数が向上されている。
「価格が上がり過ぎた」(3/8)・・・複数ショップ店員談 品薄が続くハイエンドグラフィックスカード。一方でミドルレンジクラスの在庫は回復しつつある。しかし、急激な値上がりの影響で、従来からのユーザーはもちろんマイニング目当ての客も敬遠気味。「ほとんど売れなくなった」という。
なお、複数のメーカー関係者によると値上がりはまだ続く模様。「日本よりも海外のほうが高い」状況で、出荷の割り振りも、優先的に海外市場向けに行われているという。
なお、複数のメーカー関係者によると値上がりはまだ続く模様。「日本よりも海外のほうが高い」状況で、出荷の割り振りも、優先的に海外市場向けに行われているという。
2017年自作PC市場は好調で、単体PC市場と対象的な結果に - PC Watch マザーボード/CPU/電源/HDDベア/PCケースの5ジャンルを「主要PCパーツ」として調査した結果、過去1年間の販売数量伸び率(前年同月比)を算出すると、おおむねCPUの売れ行きに連動する傾向を示していたという。
CPUの売れ行きは、2017年2月〜7月までは前年割れで推移していたが、8月以降はほぼ120.x%台に好転し、2018年1月は130.9%と高い伸び率を記録。同月はマザーボードが前年比131.6%、電源が128.4%、HDDベアが104.3%、PCケースが103.9%と好調な結果を見せている。
CPUの売れ行きは、2017年2月〜7月までは前年割れで推移していたが、8月以降はほぼ120.x%台に好転し、2018年1月は130.9%と高い伸び率を記録。同月はマザーボードが前年比131.6%、電源が128.4%、HDDベアが104.3%、PCケースが103.9%と好調な結果を見せている。
セール情報
Amazon.co.jp: 【まとめ買い20%OFF】80〜90年代の人気マンガ: Kindleストア 対象作品には、『北斗の拳』『聖闘士星矢』『DRAGON BALL』『DRAGON QUEST―ダイの大冒険―』『るろうに剣心―明治剣客浪漫譚―』といったジャンプ黄金期の作品が多数含まれています。また、『機動警察パトレイバー』『ARMS』など少年サンデー掲載作品、『GTO』『金田一少年の事件簿』といった少年マガジン掲載作品も対象となっています。
なお、クーポンはキャンペーンページの[クーポンを取得する]ボタンを押し、キャンペーン設定完了メールを受け取ると、以後の購入時に適用される仕組みです。購入する際は先にクーポンを取得することを忘れないよう注意してください。
なお、クーポンはキャンペーンページの[クーポンを取得する]ボタンを押し、キャンペーン設定完了メールを受け取ると、以後の購入時に適用される仕組みです。購入する際は先にクーポンを取得することを忘れないよう注意してください。
| Linux |
2018.03.09 Friday
Linux Mint 18.3 : Conky の Lua スクリプトの書き方 Part2 | 00:34 |
Conky で直線を描く方法
直線を描くには知っておくべき関数がいくつかあります。まずは cairo_set_line_width (cr,1) です。ここや他の例にもあるように cairo の関数は cairo_なになに(cr, 引数1, 引数2, ...) という形式をとります。main 関数で cr を初期化し、cairo の関数を使うときは必ず ( の次に cr と続けます。
ラインキャップ(先端の形状):
cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT)
または
cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND)
または
cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE)
BUTT、ROUND、SQUARE の違いは画像を見ると一目瞭然です。デフォルトでは BUTT になっています:
前回、cairo_set_source_rgba(cr,1,1,1,1) という関数を使いました。この関数で色を指定したら、次は cairo_move_to(cr,100,100) 関数を使って直線の開始点を指定する必要が有ります。それでは太さ 2 ピクセルの白色の直線を Conky ウィンドウの左上から 100 ピクセル右、100 ピクセル下の位置から引いてみましょう:
line_width=2
line_cap=CAIRO_LINE_CAP_BUTT
red,green,blue,alpha=1,1,1,1
startx=100
starty=100
----------------------------
cairo_set_line_width (cr,line_width)
cairo_set_line_cap (cr, line_cap)
cairo_set_source_rgba (cr,red,green,blue,alpha)
cairo_move_to (cr,startx,starty)
実はこれでは足りません。開始点は指定しているものの、終止点を指定しないからです。終止点を指定するには Conky ウィンドウの絶対的な座標で指定する方法 cairo_line_to (cr,200,100) と開始点からの相対的な座標で指定する方法 cairo_rel_line_to (cr,100,0) の 2 つがあります。この場合、どちらを使っても同じ結果になります。cairo_rel_line_to (cr,100,0) では開始点から右に 100 ピクセル、開始点から下に 0 ピクセルの位置まで直線を描くように指定しています。終止点を指定したら cairo_stroke (cr) を最後につけて実際に直線を描画します:
line_width=2
line_cap=CAIRO_LINE_CAP_BUTT
red,green,blue,alpha=1,1,1,1
startx=100
starty=100
endx=200
endy=100
----------------------------
cairo_set_line_width (cr,line_width)
cairo_set_line_cap (cr, line_cap)
cairo_set_source_rgba (cr,red,green,blue,alpha)
cairo_move_to (cr,startx,starty)
cairo_line_to (cr,endx,endy)
cairo_stroke (cr)
.conkyrc もこちらのものに変えてください(どうやら図形を描画するのに double_buffer = true という設定は必須のようです):
conky.config = {
-- Conky settings -- #
background = false,
update_interval = 1,
cpu_avg_samples = 2,
net_avg_samples = 2,
override_utf8_locale = true,
double_buffer = true,
no_buffers = true,
text_buffer_size = 32768,
imlib_cache_size = 0,
-- Window specifications -- #
own_window = true,
own_window_type = 'dock',
own_window_argb_visual = true,
own_window_argb_value = 0,
own_window_transparent = yes,
--own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
own_window_class = 'Conky',
border_inner_margin = 50,
border_outer_margin = 0,
--border_width = 1,
-- position & minimum_size -- #
gap_x = 5,
gap_y = 60,
minimum_height = 500,
minimum_width = 500,
alignment = 'top_right',
-- Graphics settings -- #
draw_shades = false,
draw_outline = false,
draw_borders = false,
draw_graph_borders = false,
-- Text settings -- #
double_buffer = true,
no_buffers = true,
use_xft = true,
font = 'Ubuntu Mono:size=12',
xftalpha = 0.8,
out_to_console = false,
out_to_stderr = false,
extra_newline = false,
stippled_borders = 0,
uppercase = false,
use_spacer = 'none',
-- Graph settings -- #
show_graph_scale = false,
show_graph_range = false,
-- Load lua script -- #
lua_load = '~/.conky/test/script.lua',
lua_draw_hook_post = 'main'
}
conky.text = [[
]]
線の太さについても考慮しなくてはなりません。1 より大きい値を指定すると線の太さだけでなく、見え方にも影響を与えます。例えば、先の太さを 10 に指定したら、片方の端から 5 ピクセル、もう片方の端から 5 ピクセル飛び出てしまいます。つまり、直線の左上の座標は実際には (100,95) となり、左下は (100,105) になります。また、線というより矩形になってしまいます。
描画したい図形の座標や諸々の値を指定するために変数や文字を使うんだなとわかれば、あとは描きたいものの複雑さ次第です。
例えば、CPU 使用率のインジケーターを直線で表示したい場合は、まずお馴染みの cpu_perc=tonumber(conky_parse("${cpu}")) を使います。Conky の変数 ${cpu} をパース(conky_parse)して、数値に変換したら(tonumber)、変数(cpu_perc)に格納します。このように何個も () があるとつけ忘れやすいので注意します。
以下に例を示します。これは 0 から 100 までの値を出力します。すでに書いた 100 ピクセルの直線のコードを少し書き改めるだけです:
cpu_perc=tonumber(conky_parse("${cpu}"))
line_width=2
line_cap=CAIRO_LINE_CAP_BUTT
red,green,blue,alpha=1,1,1,1
startx=100
starty=100
endx=startx+cpu_perc
endy=starty
----------------------------
cairo_set_line_width (cr,line_width)
cairo_set_line_cap (cr, line_cap)
cairo_set_source_rgba (cr,red,green,blue,alpha)
cairo_move_to (cr,startx,starty)
cairo_line_to (cr,endx,endy)
cairo_stroke (cr)
endx=startx+cpu_perc の位置まで直線を描いています。Conky の変数 ${cpu} の値に応じて直線の終止点が変わります。endx=100+cpu_perc と書かず endx=startx+cpu_perc と書いていたり、endy=100 と書かず endy=starty と書いたりしている点にも留意してください。変数を上でまとめれば後で編集しやすくなります。リテラルではなくなるべく変数を使うことで時間の節約につながります。
直線を描くだけでなく、もっと多くのことが直線で出来ます。図形を描くのに直線を利用してみましょう。枠として描いたり、中を塗りつぶしたり出来ます。三角形を描くとしたら、線と線を結ぶ工程が必要です。これは以下の関数で出来ます:
cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER)
または
cairo_set_line_join (cr, CAIRO_LINE_JOIN_BEVEL)
または
cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND)
デフォルトは MITER です。MITER は面取りしない、BEVEL は面取りする、ROUND は丸くするよう指定します。cairo_close_path(cr) 関数も直線をつなぎあわせて一続きの線を描くのに必要です。つまりこうなります:
line_width=20
line_cap=CAIRO_LINE_CAP_BUTT --we don't need this any more after closing the path
line_join=CAIRO_LINE_JOIN_MITER --but this will still affect how the lines look
red,green,blue,alpha=1,1,1,1
startx=100
starty=100
pointx=startx+100
pointy=starty+100
endx=pointx-100
endy=pointy
----------------------------
cairo_set_line_width (cr,line_width)
cairo_set_line_cap (cr, line_cap)
cairo_set_source_rgba (cr,red,green,blue,alpha)
cairo_move_to (cr,startx,starty)
cairo_line_to (cr,pointx,pointy)
cairo_line_to (cr,endx,endy)
cairo_line_to (cr,startx,starty)
cairo_set_line_join (cr, line_join)
cairo_close_path (cr)
cairo_stroke (cr)
見てわかるように、cairo_move_to を繰り返し使う必要はありません。「パス」を描いているからです。これに関してはあたかなもペンでなぞっているように描けます。
最後に、描いたパスが視覚化されるように、cairo_stroke 関数を使う必要が有ります。
実際のところ、close_path を使うことで三角形の最後の線は描く必要がありません。close_path はいつでも最後の点から開始点までを結ぶからです。
もし三角形の中を塗りつぶしたければ cairo_stroke(cr) ではなく cairo_fill(cr) を使います。ただし、cairo_fill(cr) を使った場合、線の太さも面取りの設定も反映されなくなります。更に、cairo_fill では close_path 関数を使う必要はありません。というのも cairo_fill が塗りつぶす領域を生成するためにパスを自動で閉じるからです。close_path を使ったとしても冗長になるだけで何も悪さはしません。
もし、図形の枠を描いたあとで、塗りつぶしをしたい場合、例えば、枠と中で色を変えたい場合などには、cairo_fill の代わりに cairo_fill_preserve を使います。そして枠の色をセットしたあと、cairo_stroke で枠を描画します:
cairo_set_line_width (cr,20)
cairo_move_to (cr,100,100)--start point
cairo_line_to (cr,200,200)--diagonal line down
cairo_line_to (cr,100,200)--horizontal line
cairo_close_path (cr)--draws vertical line back to start
cairo_set_source_rgba (cr,1,1,1,1)--white
cairo_fill_preserve (cr)--fills in the triangle in white
cairo_set_source_rgba (cr,1,0,0,1)--red
cairo_stroke (cr)--draws the triangle outline in red
cairo のサンプル: https://www.cairographics.org/samples/
四角形・円・弧を描く
cairo は線以外にも以下のものが描けます:
- 四角形
- 弧
- 円
- 曲線
四角形
三角形を直線で自力描いたように、四角形も自力で描くことは出来ますが、cairo には四角形を描画する機能が組み込まれています。cairo_rectangle(cr, x, y, width, height) です。x,y は四角形の左上の座標です。
三角形で書いたように四角形も書けます:
--settings
line_width=5
top_left_x=20
top_left_y=20
rec_width=100
rec_height=50
red=1
green=0
blue=0
alpha=1
--draw it
cairo_set_line_width (cr,line_width)
cairo_rectangle (cr,top_left_x,top_left_y,rec_width,rec_height)
cairo_set_source_rgba (cr,red,green,blue,alpha)
cairo_stroke(cr)
塗りつぶしたければ cairo_stroke(cr) の代わりに cairo_fill(cr) を使います。もし枠と中で色を変えたい場合は、まず cairo_fill_preserve で塗りつぶしたあと、cairo_stroke で線を描きます:
--settings
line_width=5
top_left_x=20
top_left_y=20
rec_width=100
rec_height=50
fill_red=1
fill_green=1
fill_blue=1
fill_alpha=1
line_red=1
line_green=0
line_blue=0
line_alpha=1
--draw it
cairo_set_line_width (cr,line_width)
cairo_rectangle (cr,top_left_x,top_left_y,rec_width,rec_height)
cairo_set_source_rgba (cr,fill_red,fill_green,fill_blue,fill_alpha)
cairo_fill_preserve (cr)
cairo_set_source_rgba (cr,line_red,line_green,line_blue,line_alpha)
cairo_stroke (cr)
四角形には直線の時にはあったラインキャップをセットする利点はありません。四角形には「緩い頂点」がないからです。cairo_close_path も使う必要はありません。cairo_stroke を使えば、自動的に閉じられるからです。しかし、直線の結合点を少し変えたければ以下のように角を丸めることが出来ます:
cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND)
cairo_stroke (cr)
cairo_fill を使うときは線の太さ、ラインキャップ、結合の仕方は特に意味はありません。
円・弧を描く
弧に関しては cairo_arc(cr,center_x,center_y,radius,start_angle,end_angle) と cairo_arc_negative(cr,center_x,center_y,radius,start_angle,end_angle) の 2 つの関数が有ります。cairo_arc は時計回りに弧を描くのに対し、cairo_arc_negative は半時計回りに弧を描きます。弧を描く最初の困難は角度を度ではなくラジアンで表記することです。ラジアンと度の関係を知っておく必要が有ります:
ラジアンと度の関係
180°= π rad
180°= π rad
lua には数学の関数がいくつか組み込まれています。その一つに math.pi があり、円周率を返してくれます。
もうひとつは 0 度が円の一番上ではないことです。むしろ 0 度は円の一番右です。円を描きたかったらこのことは問題ではありませんが、次のコードを書く必要が有ります:
center_x=100
center_y=100
radius=50
start_angle=0
end_angle=2*math.pi--same thing as 360 degrees
cairo_arc(cr,center_x,center_y,radius,start_angle,end_angle)
cairo_stroke(cr)
何かを描くために stroke を使う時は毎回線の太さをセットする必要が有ります。stroke を使って線の末端を見るつもりなら、ラインキャップを変更すれば線の末端に反映されます。stroke に影響を与える他の因子は結合の種類です。複数の要素からひとつのパスを作成するつもりなら、曲線や直線に加えて弧は上の例で示したように一つのパスを作り、ひとまとまりになります。それよりも前に色やアルファ値をセットできます。
円を塗りつぶすには cairo_stroke から cairo_fill に変えます。
しかし、もし弧を描きたかったらラジアンと角度の設定を考慮する必要が有ります。例えば、一番上から一番右に 1/4 の円を描きたいとすると、コードはこのようになります:
center_x=100
center_y=100
radius=50
start_angle=0
end_angle=90
cairo_arc (cr,center_x,center_y,radius,(start_angle-90)*(math.pi/180),(end_angle-90)*(math.pi/180))
cairo_stroke (cr)
ラジアンよりもむしろ度数で値を入力したいので、そのための計算式 (start_angle-90)*(math.pi/180) を cairo_arc 関数の引数に入れてみました。start_angle=0 で円の一番上から描くようにセットし、end_angle=90 で円の一番右まで描くようにセットしています。次に (math.pi/180) を掛けることでラジアンに変換しています。最後に cairo_stroke で描画します。
次のコードは弧の開始点から終止点までを直線で引くことになります。cairo_stroke でなく cairo_fill(cr) を使えば底が平らになり中が塗りつぶされます。
cairo_close_path (cr)
cairo_stroke (cr)
cairo_arc に開始角度を 270°、終始角度を 90°にセットすれば、上半分の円が得られます。start=270, end=450 (360+90) としても start=-90, end=90 としても結果は同じです:
逆に cairo_arc_negative を使えば開始角度を 270°、終始角度を 90°にセットすると、下半分の円が得られます。
このことはパスを描くのに大切です。また、close_path あるいは fill 関数を使うことで終止点から開始点まで線を引くことを忘れないでください。パスが連続していないと予期せぬ結果になります。
arc あるいは arc_negative を使えばリング状のメーターを表示することができます。
バー状のメーターとリング状のメーターを描画する
Conky から cpu 使用率の値を取得しその値に応じて直線の長さを変えるコードを作成しました。今度は、ちょっと面白いものにするために、背景に色を付け、バーもその色とは異なる色にして、垂直方向のインジケータを作成します。まずは何からしたら良いでしょうか。まずは、lua における cairo の命令の順序を考える必要が有ります。スクリプトで、より下に書いたものが、すでに描画されたものより上に描画されます。
そういうことなので、まずは色付けされた背景を用意し、その上にインジケーターを描画するようにします。指定する必要のある項目は以下の通りです:
- インジケーターをどこに表示するか
- インジケーターの大きさ
- 背景とインジケーターのそれぞれの色
そのための変数を書くとこうなるでしょう:
--SETTINGS FOR CPU INDICATOR BAR
bar_bottom_left_x= 50
bar_bottom_left_y= 200
bar_width= 30
bar_height= 100
--set bar background colors, 1,0,0,1 = fully opaque red
bar_bg_red=1
bar_bg_green=0
bar_bg_blue=0
bar_bg_alpha=1
--set indicator colors, 1,1,1,1 = fully opaque white
bar_in_red=1
bar_in_green=1
bar_in_blue=1
bar_in_alpha=1
スクリプト内の別のところで変数名が重複しないようにユニークな変数名にする必要が有ります。通常、変数名を見ればどんな値が格納されるの変わるような名前が良いです。何度も何度も長い変数名を書くのは面倒かもしれませんが、スクリプトを実行しても、変数を上書きしてしまったがためにうまく動作しないよりはマシです。背景を描画するのはかなり単純で、矩形を塗りつぶすことで実現します。唯一注意すべきことは底の座標と幅と高さをセットするとき、高さが負の値になることです。では実際に cairo_rectangle 関数を使って試してみましょう:
--draw background
cairo_set_source_rgba (cr,bar_bg_red,bar_bg_green,bar_bg_blue,bar_bg_alpha)
cairo_rectangle (cr,bar_bottom_left_x,bar_bottom_left_y,bar_width,-bar_height)
cairo_fill (cr)
赤く塗りつぶされた四角形が描けたので、次はインジケーターを作成していきます。まずは、value=tonumber(conky_parse("${cpu}")) で CPU 使用率を変数に格納します。変数の値を使ってインジケーターの高さに反映します。少々複雑なりますが、計算が必要になってきます。
高さ 100 ピクセルのインジケーターを描画したければ、単純に取得した CPU 使用率をそのまま使えば良くなります。というのも CPU 使用率は 0 から 100 までの値をとるからです。しかし、高さ 200 ピクセルあるいは 50 ピクセルのインジケーターを作成したい場合は取得した CPU 使用率を適切に増やしたり減らしたりしないといけません。CPU 使用率の最大値は 100 だとわかっているので、max_value=100 とし bar_height=200 もしくは bar_height=50 とすれば、倍率は scale=bar_height/max_value で計算できます。
bar_height=200 であれば scale=2 となります。つまり、 CPU 使用率が 1 増えればバーは 2 ピクセル増えます。CPU 使用率 100% では長さ 200 ピクセルになります。望むとおりの結果です。そこで、indicator_height=scale*value で取得したあと描画する四角形に組み込みます。以上の議論をまとめるとこうなります:
--draw indicator
cairo_set_source_rgba (cr,bar_in_red,bar_in_green,bar_in_blue,bar_in_alpha)--set indicator color
value=tonumber(conky_parse("${cpu}"))
max_value=100
scale=bar_height/max_value
indicator_height=scale*value
cairo_rectangle (cr,bar_bottom_left_x,bar_bottom_left_y,bar_width,-indicator_height)
cairo_fill (cr)
これで CPU 使用率インジケーターが動作しているはずです。
バーを増やそうと思って何度も何度もコードをコピー & ペーストしたり、変数を編集したりするのは面倒です。しかし、コピー & ペーストするよりもインジケーターバーを描画するコードを関数としてひとまとめにするほうがより手っ取り早い方法です。この話は後ほどすることにします。
インジケーターに CPU 使用率を選んだのは他でもなく、頻繁に変化するので動作している様子がよくわかるからです。リング状のメーターを作成するのはバーを作成したのととても似ています。ただし、Conky から取得した CPU 使用率を使って cairo_arc 関数に渡す角度を変化させます。背景となるリングを着色し、インジケーターとなるリングは別の色をつけます。リングの大きさは変数を変更すれば変更できます。CPU 使用率が 0 の時はリングは一番上を示し、CPU 使用率が増えるに連れて時計回りに 100% になるまでバーが伸びるようにします。今回作成するのは完全な円で、最初と最後は結びます。
時計回りにするので cairo_arc を使います。四角形の時とは異なり、メーターを描くのに cairo_stroke を使っていきます。なので caro_set_line_width の値はセットしておく必要が有ります。メーターの太さに関わってきます。まずは、どんなリングを描きたいか諸々の設定を決めましょう。ラインキャップは設定する必要が有りますが、線をつなげているわけではないので線の結合の種類は指定しなくて大丈夫です。
弧の関数は cairo_arc (cr,center_x,center_y,radius,start_angle,end_angle) でした:
--SETTINGS
--rings size
ring_center_x=200
ring_center_y=200
ring_radius=50
ring_width=20
--colors
--set background colors, 1,0,0,1 = fully opaque red
ring_bg_red=1
ring_bg_green=0
ring_bg_blue=0
ring_bg_alpha=1
--set indicator colors, 1,1,1,1 = fully opaque white
ring_in_red=1
ring_in_green=1
ring_in_blue=1
ring_in_alpha=1
--indicator value settings
value=conky_parse("${cpu}")
max_value=100
インジケーターバーの時と同様に、まずは背景となるリングを描いていきます:
--draw background
cairo_set_line_width (cr,ring_width)
cairo_set_source_rgba (cr,ring_bg_red,ring_bg_green,ring_bg_blue,ring_bg_alpha)
cairo_arc (cr,ring_center_x,ring_center_y,ring_radius,0,2*math.pi)
cairo_stroke (cr)
line_width についての注意点なのですが、円または弧を描画するときの線の太さは直線の場合と全く同じ挙動を示します。線の太さの半分がそれぞれ内側・外側に描画されます。つまり、半径 50 ピクセル、線の太さ 20 ピクセルの円または弧であれば、円の中心点から線の内端までは 40 ピクセルになり、円の外端までは60ピクセルになります。
背景を赤くした円を作成したので、value 変数に格納されている cpu 使用率の値をインジケーターのバーの動きに適用する方法を検討しなければなりません。この場合は、cpu 使用率に比例して変化するのは弧の末端角度です。再度、インジケーターの弧を正しい割合で動かすのに計算が少し必要です:
degrees=360
scale=degrees/max_value--ie for every 1% increase in cpu% the arc should move an additional 3.6 degrees
end_angle=value*scale
あるいは end_angle=value*(360/max_value) と書くことも出来ます。これで、すべて cairo_arc に渡す準備が出来ました:
--draw indicator
cairo_set_line_width (cr,ring_width)
end_angle=value*(360/max_value)
cairo_set_source_rgba (cr,ring_in_red,ring_in_green,ring_in_blue,ring_in_alpha)
cairo_arc (cr,ring_center_x,ring_center_y,ring_radius,0,(end_angle-90)*(math.pi/180))
cairo_stroke (cr)
実は上のコードを試してもうまく行かないことに気づくでしょう。間違いが起こるとどうなるか見てもらうためにやってみました。
どこで計算を間違っていたのでしょうか。end_angle の値がどうなっているか print で出力してみます:
--draw indicator
cairo_set_line_width (cr,ring_width)
end_angle=value*(360/max_value)
print (end_angle)
cairo_set_source_rgba (cr,ring_in_red,ring_in_green,ring_in_blue,ring_in_alpha)
cairo_arc (cr,ring_center_x,ring_center_y,ring_radius,0,(end_angle-90)*(math.pi/180))
cairo_stroke (cr)
cpu 使用率も同時に見れるように conky.text = [[ ... ]] 内に ${cpu} を記述することにしました。もっとも print(value, end_angle) を使えば両方共端末で見ることは出来ますが。。。
計算結果は問題ないように思えます。なので cairo_arc (cr,ring_center_x,ring_center_y,ring_radius,0,(end_angle-90)*(math.pi/180)) のどこかで誤りがあるに違いありません。それは開始角でした 0 のままにしており、cairo_arc 関数のトリッキーな挙動を考慮していませんでした。実際期待していた値よりも 90°進んでいたのです。そこでこのように修正します:
cairo_set_line_width (cr,ring_width)
end_angle=value*(360/max_value)
--print (end_angle)
cairo_set_source_rgba (cr,ring_in_red,ring_in_green,ring_in_blue,ring_in_alpha)
cairo_arc (cr,ring_center_x,ring_center_y,ring_radius,(-90)*(math.pi/180),(end_angle-90)*(math.pi/180))
cairo_stroke (cr)
これでリング状のメーターの完成です:
参考元: Using Lua scripts in conky (Part 03), (Part 04), (Part 05)
| Linux |
| 1/2 | >>
Show some apps list:
Follow on your feed reader:
About this blog:
Linux Mint-centric chronicle with anime girls since 2009.Best View with Google Chrome 1980x1080 dimension.Info 更新は不定期です。
- Mint 18.3 : オススメ Python IDE 8 選
- Mint 18.3 : Python ではじめるコマンドラインツールの作成とパッケージ化
- Linux ユーザーなら Git を活用しよう
- Shell :シェルスクリプトを組もう! Zenity 編
- Shell :シェルスクリプトを組もう! Dialog 編