2016年12月28日水曜日

Linux用のメジャーなフリーソフト(大半はWindowsでも利用可)


ブラウザ
Firefox
Chromium (Chrome)

オフィススイート
LibreOffice (OpenOfficeから派生した現在の主流)
 LibreOffice Writer (文章作成)
 LibreOffice Calc (表計算)
 LibreOffice Draw (図作成)
 LibreOffice Impress (プレゼン)
 LibreOffice Base (データベース)

お絵かき
Gimp
Krita (CMYK対応)

写真現像と管理
Darktable
digiKam

3DCG
Blender

動画ノンリニア編集
Kdenlive

動画加工、合成
Jahshaka


2016年10月15日土曜日

Ubuntu 16.10の感想

16.04からdo-release-upgradeで確かめたら16.10の更新が来ていたのでGUIのアップデータから更新してみました。

結果日本語が入力できなくなりました。fcitx+mozcなんですがいちいち端末からfcitxと入力する必要があります。 このバグが治るまでは16.04LTSに留まるのが無難ですね。もう更新してしまったので当面の間はxubuntu-desktopを入れて凌ぐことにしました。

動作の面では予想通りノーマルな16.04から比べればキビキビと高速化しているので確実に導入するメリットがあります。
他のバグとしてはUnity7でフォントがすこし小さく表示されています。
あとxprofileの設定を休止状態から復帰した時に読み込んでくれません。
一部アプリはクラッシュして起動できなかったり、不安定なものもあります。 自分でビルドしたアプリはダイナミックリンクなどしていると再ビルドの必要があるかもしれません。



2016年9月26日月曜日

Ubuntu16.04 ログイン時の音を消す方法

以下のファイルを編集して
/usr/share/glib-2.0/schemas/50_unity-greeter.gschema.override

以下の二行を追加する。

[com.canonical.unity-greeter]
play-ready-sound = false


その後以下のコマンドを実行する。
sudo glib-compile-schemas /usr/share/glib-2.0/schemas/


参考元には簡単なコマンドがある
http://askubuntu.com/questions/24946/how-do-i-disable-the-drum-beat-sound-on-the-login-screen

2016年8月27日土曜日

最新のMesaでUbuntuを更に快適に

Phoronixの記事に最新のMesaが紹介されていたので試してみました。

padokaさんが配布されており簡単に試すことができます。
sudo add-apt-repository ppa:paulo-miguel-dias/mesa
sudo apt-get update
これで更新が自動的に入ります。

さて感想ですが明らかに体感速度が向上しておりかなりおすすめです。素晴らしいです。

またこれとは別にKernel(intelのツリー)も最新版を導入しているのですがカーネル単体だと速度変化は体感できていません。

追記:あまり安定しておらずおすすめしかねます。

2016年8月14日日曜日

Linuxの常識 (Windowsとの違い)


/がルートフォルダ。 C:\みたいな感じ。
Linuxインストール時には/とswap用のパーティションを個別に作るのが普通
メモリが潤沢にあるならswapはなくても良い。
ファイルシステムはEXT4が標準的。Ubuntuなら後からNTFSも扱えるため移行も楽。
パスの区切りが/。
ディスクなどのデバイス自体は /dev/sdaや/dev/sdbなど。HDD、SSD、USBメモリなど
パーティションで区切られた部分は/dev/sda1や/dev/sda2など。C:\やD:\などに相当
パーティションを使用するときはマウントという操作を行う必要がある。
例えば/dev/sdb1を/media/memorystickなどに結びつける。GUIのファイラーを使えば自動でマウントされるのが普通。

ユーザーのフォルダは/home/ユーザー名/。 C:\Users\ユーザー名\に相当
このフォルダは~で表される。~/Documentsは /home/ユーザー名/Documentsに等しい。
隠しフォルダは . で始まる名前。
アプリケーションの設定ファイルなどは ~/.アプリ名などにあることが多い。
/ フォルダなどのファイルを変更するには管理者権限が必要なのでGUIファイラーも管理者権限で起動する必要がある。


アプリケーションの設定は メニューの編集(Edit) > 設定(Preferences)にあるのが普通。
アプリケーションのファイルの拡張子は付いていないことが普通。 firefoxがfirefox.exeに相当
テキストファイルもREADMEなど拡張子が付いていないことが多い。
アプリによってはマウスの中クリックがコピペに割り当てられていることがある。

Windowsのコマンドプロンプトに相当するのが端末(Terminal)でよく使うことになる。
Terminalの中身がBashと呼ばれるもの。
Terminalなどはコピーが Ctrl+Shift+C で貼り付けが Ctrl+Shift+V に割り当てられている。
Ctrl+Cは実行中のプログラムへ停止信号を送るのに使われる。
Ctrl+Rで過去のコマンドの履歴を検索できる。
Ctrl+Uでキャレットより前のコマンドを削除
Ctrl+Kでキャレットより後のコマンドを削除

コマンドには管理者権限が必要なものがあるので必要に応じてsudoを使う。
Bashのコマンドをまとめたスクリプトファイルの拡張子は.shが普通。
スクリプトファイルを実行するにはまず権限を付与することが必要になる。 chmod +x スクリプト
そして実行する際は./スクリプト.shなどとして ./ でカレントフォルダのファイルであることを明示する必要がある。
Linuxの文字コードはUTF-8が普通。昔はEUC-JPが普通だった。
改行はLFのみが普通。

アプリケーションは大量にパッケージ化されており、Windowsのように手動でダウンロード、解凍、インストールすると言った手間は普通いらない。
インストールはUbuntu系ならapt search アプリ名 で正式なパッケージ名を検索してから
sudo apt install パッケージ名 でインストールできる。
UbuntuのUbuntu SoftwareからGUIでメジャーなアプリをインストールすることもできる。

以下プログラマ向けの話
aptなどから導入したライブラリなどは /usr/include にヘッダファイル、 /usr/lib などにライブラリファイルが導入されることが多く、自分でビルドしてインストールされたものは /usr/local/include 、 /usr/local/lib などに導入される場合が多い。

2016年7月1日金曜日

Ubuntu+PulseAudioで音量にリミッターを掛ける

背景
日頃音量が小さいアプリに合わせてマスターボリュームも大きくなりがちになります。そこに音量が大きいアプリが最大音量で鳴れば耳を痛めてしまいます。そこで出力されるマスターボリュームにリミッターを掛けることにします。

方針
PulseAudioにリミッターのプラグインを読み込ませます。リミッターにはswh-plugins内のfastLookaheadLimiterを使用します。プラグインの規格はLADSPAです。

まずはswhプラグインを導入し
sudo apt install swh-plugins

ファイル ~/.pulse/default.pa を作成し以下のような内容にします。
.include /etc/pulse/default.pa

load-module module-ladspa-sink sink_name=limiter label=fastLookaheadLimiter  plugin=fast_lookahead_limiter_1913 control=0,-15,0.5
set-default-sink limiter

pluginはインストールされたsoファイルの名前です。
labelはそのファイル内で読み込むプラグインの名前です。
sink_nameは好きな名前をつけましょう。
controlの最初の引数は事前に音量を上げ下げするパラメータらしいですが0でいいでしょう。
次の引数がリミッターです。-15dBを設定してみました。
3番めの引数が音量を元に戻すまでの時間sです。長めでも大丈夫でしょう。0.01~2s

結果
きちんと動作しました。しかし音量変更時にノイズが乗ってしまいます。
このプラグインは5msの遅延が入るらしいですが体感できませんでした。

その他
default.paに記述しなくてもpacmdで直接試すことができます。
パラメータの範囲は直接ソースを見たほうが早いです リミッターは 0 ~ -20dBの範囲です。

https://gist.github.com/ion1/5890413
https://github.com/LMMS/lmms/blob/master/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c
http://plugin.org.uk/ladspa-swh/docs/ladspa-swh.html#tth_sEc2.39

2020/10月頃から起動時にリミッターが読み込まれなくなりました。今は手動で pulseaudio -kD して読み込んでいる状態です。 

2022年 現在はxubuntuのSettings Session and Startup に pulseaudio -kD を登録してリセットしています。

2016年6月26日日曜日

grepとbashとアスタリスク*

grep a* といった
grepのパターンに*が含まれているとgrepに渡す前にbashがワイルドカードと解釈してカレントディレクトリにあるファイル名に展開してしまうので期待道理に動かないよという話。
echo *を実行してみると理屈がよくわかると思う。
grep "a*" のように常に引用符で括る癖をgrepに限らずつけたほうが良い。

2016年6月16日木曜日

シェルスクリプトで文字列を結合する


How to concatenate strings in shell script?

input file: input.txt
foo
bar 

expected results: output.txt
foo_awesome
bar_awesome

STR=_awesome
cat input.txt | xargs -n1 -d'\n' printf "%s %s\n" $STR | awk '{printf "%s%s\n", $2, $1}' > output.txt

Isn't it awesome?
解説
catでファイル内容を読み込みその内容とSTR変数をxargsを使いprintfの引数として渡す。
つまりprintf "%s %s\n" _awesome fooが一番目に呼ばれることになる。空白を挟んで _awesome foo という行を作り出し標準出力している。本当はここで整形を済ませたいがprintfコマンドが引数の順序を指定できず自由度が低いためawkのprintfで本格的に整形している。そして標準出力をファイルにリダイレクトして完了。


2 string variables version.

expected results: output.txt
prefoo_awesome
prebar_awesome
STR2=pre 
STR=_awesome
cat input.txt | xargs -n1 -d'\n' printf "%s %s %s\n" $STR $STR2 | awk '{printf "%s%s%s\n", $2, $3, $1}'  > output.txt

Shell script commandの根本的な解説

シェルスクリプトのコマンドがわかりにくい一因はその入出力方法が分かりにくいからであり、それさえ理解できればあとはなんとかなります。コマンド自体はただのC言語などで書かれたプログラムであり入出力方法の数はプログラムで可能な数だけありうるのです。

よく使われる入力方法としては
標準入力
プログラム引数
ファイル
があり
出力方法としては
標準出力
標準エラー出力 (コマンドの成否を表すメッセージなど)
ファイル
プログラムの戻り値(整数で正常終了した場合は普通0が返される)
があります。 入出力ともにネットワーク、プロセス間通信 etc などがありえます。

では次のコマンドを例に解説していきます。
cat foo.txt | sort
まずcatコマンドの引数として foo.txt を入力しています。そしてcatコマンドはその引数を元にファイル内容を読み込み標準出力へと出力します。そして | パイプで接続され標準出力の内容が次のプログラムsortへ標準入力として渡されます。sortは引数がなければ標準入力の内容をソートして標準出力へと出力します。そしてsortの標準出力の内容はこの後に何も指定していないため画面へと出力されます。

次のように
cat foo.txt | sort > out.txt
> リダイレクトを使用することで標準出力の内容をファイルへと出力することができます。(この場合 out.txtはsortの引数として渡しているわけではありません。|や>はシェルの機能です。)

プログラム自体がファイルを直接出力するというパターンもあります。
gcc main.c -o app
gccコンパイラに引数としてmain.c -o appを渡しています。gccはmain.cファイルを読み込みコンパイルした内容をappという名前のファイルへ出力します。

さて入力方法としては引数と標準入力が主に使われていることがわかりました。またファイルとしての入力は引数でファイル名を指定して読み込むというパターンが多いこともわかりました。出力方法としては基本的に標準出力が使われていることもわかりました。標準出力は| パイプで接続すれば次の標準入力になることはわかりましたが、後続のコマンドの引数として入力するにはどうしたら良いのでしょうか。それにはxargsを使いましょう。

input.txt:
file1
file2
file3

cat input.txt | xargs cat

xargsは標準入力から渡された文字列をxargsの引数として渡されたcatの引数として呼び出します。つまりxargsは cat file1 file2 file3を呼び出します。catは複数のファイル名が引数として渡された場合はその内容を結合してから標準出力へ出力します。つまり上記コマンドはinput.txtに書かれているファイル名を読み込みそのファイル内容をすべて結合して画面に表示します。xargs -n1 catと指定すればcatに引数を最大1個だけ付加して呼び出します。つまりcat file1、cat file2、cat file3と3回に分けてcatが呼びだされます。catコマンドの場合は分割したところで出力結果は同じですが。

入力元出力先利用可能なコマンド
ファイル標準出力cat
引数標準出力echo、printf
標準入力引数xargs
ネットワークファイルwget
ネットワーク標準出力curl
入力元出力先シェルの機能
標準出力標準入力|
標準出力画面そのまま
標準エラー出力画面そのまま
標準出力ファイル>
標準エラー出力標準出力2>&1

引数の指定方法によって入力元や出力先を変化させることのできるコマンドはよくあります。
入力元出力先コマンド解説
標準入力標準出力grep パターン引数として渡したパターンを標準入力から検索し標準出力へ出力する
引数のファイル名標準出力grep パターン ファイル名引数として渡したパターンをファイルから検索し標準出力へ出力する

また多くのUNIXプログラムはファイル名を指定する部分に - を指定することでファイルの代わりに標準入力(または標準出力)を使用できます。
echo "int main(){}" | g++ -x c++ -

2016年5月2日月曜日

Firefox nightlyで更に快適に

やはりブラウザのパフォーマンスはPCの使用感に大きく影響する。万人にはお勧めできないが興味がある人はFirefox nighlyを試してみると良いだろう。明らかにUbuntu16.04のFirefoxバージョン46.0よりもnightlyの方が高速に動作し快適だ。

2016年5月1日日曜日

WindowsにUbuntuのgrubを消されたときの対処法

Windows8.1ならチャームから PC設定 -> 保守と管理 -> 回復 -> PCの起動をカスタマイズ (今すぐ再起動する) -> デバイスの使用 -> Ubuntuを選ぶ。
(Windows10ならスタートメニュー -> 設定 -> 更新とセキュリティ -> 回復 -> 以下同様)

Ubuntuが起動したらgrub-installを使用する。
まず lsblk でパーティションを確かめる
 sda      8:0    0 954.2G  0 disk
├─sda1   8:1    0   693M  0 part
├─sda2   8:2    0   271M  0 part /boot/efi

以下のXをそのパーティションIDに置き換えてgrubをインストールすればよい。(普通は/dev/sdaになる)
sudo grub-install /dev/sdX
もしUbuntuのインストールディレクトリにインストールした場合はWindowsが一度でも起動するとgrubが上書きされてしまうので使い勝手が悪い。 
事あるごとにWindowsがgrubを乗っ取ろうとするのでなるべくWindowsを起動しないほうがよい。
このmattnさんのツイートを見て思い出した。
むかしUbuntu(UnityじゃなくてXubuntuとかそのへん)を入れてた時にGUIエディタがPC起動時に勝手に起動してきたけどいまでもあるのか。なんとかしてほしいな。

Ubuntuの起動が遅くなったときの解決法

いつの間にか起動中に一時的に止まるようになり起動が遅くなってしまった。/var/log/syslog を見るとデバイスを開こうとしてタイムアウトしているらしい。ログのタイムスタンプからも見て取れる。
 systemd[1]: Timed out waiting for device dev-disk-by\x2duuid-*
 systemd[1]: Dependency failed for /dev/disk/by-uuid/*
そういえばUSBメモリデバイスに関してGpartedか何かで設定を追加した気がする。
/etc/fstab を見るとログと同じUUIDの設定が追加されていたのでその部分を削除してみた。すると無事再びスムーズに起動するようになった。

2016年4月28日木曜日

Ubuntuで@マークが入力できないときの改善法

Ubuntu16.04 + mozc-fcitx という環境
まずキーボードの設定がKeyboard - Japaneseになっているか確認するのが定番だが、今回の場合アットマークが入力できずしかもなぜかIMEの切り替えがされてしまう。これはUbuntuの System Settings の Text Entry で Switch to next source using: が ` キーに設定されているのが原因だったそこでそれを代わりに半角/全角キーに設定し直すことで解決できた。

Text Entry の Input sources to use: は以下のようにする
Japanese
Mozc (fcitx)

Ubuntu 16.04 LTSを導入した感想

明らかに以前の15.10?と比べて画面がさくさく動くようになった。おそらくkernel4.4でIntelグラフィックスのドライバが改善されたせいだろう。実に快適に使えるようになった。
Ubuntu Software Centerも一新されて軽くなった。

UnityのランチャーはAuto-hideにすると反応が鈍過ぎで辛いので結局System settings - Appearance - Launcher icon sizeで縮小したうえで常時表示させることにした。

なにかウインドウを新しく開いても最前面に来ないことがある。地味に不便。

一度ネットワークが繋がらなくなることがあったので手動でタスクトレイからDisconnect,Connectで復旧させた。

スリープからの復帰時にイヤホンが認識されず内蔵スピーカーに切り替わっていることがたまにある。
画面のロック状態から復帰してもスクリーンが黒いままで使えないがしばしばある。ttyなどは画面は表示されないが使えるのでCtrl+Alt+F1としたあとキーボードだけでログインしservice lightdm restartで再起動せずに済む。ただしセッションは消えてしまう。

Unity8を試してみたが今現在開発段階でありバグの塊なので戻すのに苦労することになった。試しに導入するのもやめておいたほうがいい。

Ubuntuでタッチパッドを無効にする方法

Ubuntu16.04+NECのラップトップPCでタッチパッドを無効にする方法
 まずxinputを導入する。
sudo apt install xinput
 入力デバイスを表示し
xinput
⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ USB OPTICAL MOUSE                           id=9    [slave  pointer  (2)]
⎜   ↳ PS/2 Generic Mouse                          id=16    [slave  pointer  (2)]
 Touchpad と言うようなそのものズバリの名前はないものの PS/2 Generic Mouse がタッチパッドの気がするので調べてみる。まずidの16または名前の"PS/2 Generic Mouse"を指定してデバイスノード名を調べる
xinput list-props 16
Device 'PS/2 Generic Mouse':
Device Enabled (139):    1
Device Node (261):    "/dev/input/event10"
デバイスノード名を指定して実際の入力を見てみる
sudo evtest /dev/input/event10
タッチパッドに触れて以下のようなログが動きに連動して出てきたら当たり。
Event: time 1461848272.391734, type 2 (EV_REL), code 0 (REL_X), value -1
Event: time 1461848272.391734, -------------- SYN_REPORT ------------
Ctrl+cで調査は終了。
実際に無効化してみる。 名前を指定して(idで指定するのは誤爆が怖い)
 xinput disable "PS/2 Generic Mouse"
無事に無効化できた。
これは一時的な設定なので永続的に設定するにはファイル /etc/xprofile をroot権限で作成しそこに上記の無効化コマンドを書いておけばいい。ユーザーごとに設定する場合は$HOMEに.xprofile を作成(これは先頭に「.」が付く)し記入する。