Ubuntu 17.04のDéjà Dupでファイルを復元できないバグを修正してもらった件

Ubuntu 17.04で、デフォルトのバックアップソフトであるDéjà Dupを使ってファイルを復元しようとした所、エラーになって復元できなかったのでバグ報告してみたらすぐに修正された。

パッチを当てたUbuntu 17.04用のdeja-dupをppaにアップロードしたのでよければどうぞ。

sudo add-apt-repository ppa:sicklylife/ppa 
sudo apt update 
sudo apt dist-upgrade 

Ubuntu 17.10以降のファイル検索ツールのバグを何とかしてみた件(仮)

※2017年10月4日、Ubuntu 17.10からtracker-needleは削除されて利用出来なくなってしまった様子。

技術評論社のサイトに掲載されているUbuntu Weekly Recipeにて、以下の記事が公開された。

最近ちょろっとtrackerのことを調べていたのでシンクロニシティかな、などと思ったりしたのだが、それはともかく、Ubuntu 17.04までデフォルトとして採用されていたUnity 7のDashには、ローカルに保存されているファイルを検索する機能が備わっており、Ubuntu 17.10からデフォルトになるGNOME Shellにも似たような機能は備わっているものの、ファイル検索機能としてはUnity 7と方向性が異なるようで、少々残念に思っていた。

というのも、GNOME Shellのファイル検索は全文検索がメインらしく、入力した文字列を含むPDFファイルなどが検索結果に表示され、それはそれで便利なのだが、単純にファイル名だけで検索しても引っかからないので、私的には非常に惜しい機能だと言わざるを得なかった。

上記の記事には 原則としてはファイル名を検索します と書かれているが、.txtや.html、拡張子が無いプレーンテキスト、.jpgや.pngといった画像などは検索対象にならないようで、あれこれ弄っているうちにファイル検索用のツールが別に用意されていることに気づいた。

それが上記の記事中にもある デスクトップの検索 というツールで、コマンド名は tracker-needle、パッケージ名は tracker-gui となっている。これを使えばファイル名のみで検索できるし、作成したばかりのファイルでもすぐ検索結果に出てきて中々便利なのだが、使っているうちに頻繁に検索結果が表示されなくなるバグがあることが判明した。

エラーメッセージが出力されないので、仕方なく何度も検索してみて結果が表示されないタイミングを調べた所、

f:id:sicklylife:20170802204605p:plain

↑この画面が表示されると、その次の検索結果が表示されないことが分かった。ので、とりあえずパッチを作成してみた。パッチと言っても該当部分をコメントアウトしただけのものだけど。

下記のパッチを当ててtrackerをビルドし直してみた所、検索結果が表示されない現象は収まったように見える。後日、下記のパッチを当てた17.10用のtrackerをppaにアップロードする予定。

--- a/src/tracker-needle/tracker-view.vala
+++ b/src/tracker-needle/tracker-view.vala
@@ -103,21 +103,21 @@
 
 		switch (display) {
 		case Display.NO_RESULTS:
-			Label l;
-
-			l = new Label ("");
-			l.set_justify (Justification.CENTER);
-
-			string results = _("No Search Results");
-			string help_views = _("Select the view on the toolbar for the content you want, e.g. everything, files or just images");
-			string help_search = _("Start to search using the entry box above");
-			string markup = @"<big>$results</big>\n\n$help_views\n\n$help_search";
-			
-			l.set_use_markup (true);
-			l.set_markup (markup);
-
-			view = l;
-			break;
+//			Label l;
+//
+//			l = new Label ("");
+//			l.set_justify (Justification.CENTER);
+//
+//			string results = _("No Search Results");
+//			string help_views = _("Select the view on the toolbar for the content you want, e.g. everything, files or just images");
+//			string help_search = _("Start to search using the entry box above");
+//			string markup = @"<big>$results</big>\n\n$help_views\n\n$help_search";
+//			
+//			l.set_use_markup (true);
+//			l.set_markup (markup);
+//
+//			view = l;
+//			break;
 
 		case Display.CATEGORIES:
 		case Display.FILE_LIST:

UbuntuがLinuxディストリビューションの中で最も使われているデスクトップOSという調査結果が出たそうな

スラドより、

Phoronixというサイトで、ノートパソコンでLinuxを使っている人を対象にしたアンケートが行われ、その結果Ubuntuが最も使用されているLinuxディストリビューションだという事が判明したらしい。

DistroWatch.comのページヒットランキングと並べるとこんな感じになる。

PhoronixDistroWatch (最近30日)
順位名前シェア名前HPD
01Ubuntu38.9%Linux Mint2639
02Arch Linux27.1%Debian2401
03Debian15.3%Manjaro1631
04Fedora14.8%Antergos1444
05Linux Mint10.8%Ubuntu1181
06openSUSE / SUSE4.2%openSUSE925
07Gentoo3.9%Zorin909
08CentOS / RHEL3.1%Fedora856
09Solus2%elementary803
10Manjaro1.6%Solus713

DistroWatchだとArchは14位、CentOSは16位、Gentooは46位。Archのシェアが凄いなーという印象。ArchWikiの事を考えるとユーザー多そうだなーとは思ってたけど、こんなに多いとは。Manjaroは注目はされてるけど、まだまだ使われてはいない感じか。

使っているノートPCのメーカーのランキングも載っていた。

  1. 39.6% Lenovo
  2. 27.8% Dell
  3. 16.0% ASUS
  4. 15.0% HP
  5. 11.3% Apple
  6. 11.3% Acer
  7. 4.7% 東芝
  8. 3.0% Samsung
  9. 2.3% MSI
  10. 2.1% System76

ThinkPadは日本でも好評みたいだし、Dellもよく名前を聞く上にUbuntuプリインストール機を売っているので上位なのは納得。Acer2chLinux板の荒らしが使ってたなぁ…

Ubuntuでqt5アプリケーションのフォントなどを変更する

Ubuntu GNOME 17.04を使っていて気づいたのだが、なんかVLCのメニューバーのアンダーバーが太い。

f:id:sicklylife:20170709182829p:plain

色々とググってみた結果、

というページを見つけ、フォントを変えたらアンダーバーが細くなるんじゃないかと思い立ったので設定を変更してみた。

まずQt5アプリケーションの外観を変更するためのツールであるqt5ctをインストールする。端末で、

sudo add-apt-repository ppa:nilarimogard/webupd8 
sudo apt update 
sudo apt install qt5ct 

と実行して、ppaを追加してツールをインストール。
続けて端末で、

echo 'export QT_QPA_PLATFORMTHEME="qt5ct"' >> ~/.profile 

と実行した後、一旦ログアウトするかUbuntuを再起動する。
ログインし直したら端末で、

cd ~/.config/ && wget https://sicklylife.jp/tool/qt5ct_takaop.zip && unzip -o qt5ct_takaop.zip && rm qt5ct_takaop.zip && cd - 

と実行した後、VLCやKeePassXC、nomacsなどのQt5アプリを起動するとメニューのフォントがTakao P ゴシックに変更され、アンダーバーが細くなる。

f:id:sicklylife:20170709184132p:plain

また、フォントをTakao P ゴシックではなくNoto Sans CJK JP Kaiにしたい場合は、

cd ~/.config/ && wget https://sicklylife.jp/tool/qt5ct_notokai.zip && unzip -o qt5ct_notokai.zip && rm qt5ct_notokai.zip && cd - 

と実行すればOK。

f:id:sicklylife:20170709184851p:plain

上記のコマンドではなく自分でフォントを指定したい場合や、フォント以外の外観を変更したい場合はQt5 SettingsというGUIアプリケーションを起動し、

f:id:sicklylife:20170709185048j:plain

フォントタブなどで設定を行う。

f:id:sicklylife:20170709185141p:plain

ちなみに元のアンダーバーが太いのはフォントがUbuntuフォントになっている為と思われる。
あと、qt5ctを配布しているppaは、

以上の3つ存在するが、今回は一番バージョンが新しいwebupd8のをインストールした。

UbuntuでDash to Panelのプレビューのサイズを小さくする

GNOME 3(GNOME Shell)の拡張機能Dash to Panelには、Windows 10のような起動しているアプリケーションのウィンドウのプレビューを表示する機能があるのだが、

f:id:sicklylife:20170709174542j:plain

表示されるサイズがちょっと大きめなので小さくしてみた。
端末を起動して、

sudo sed -i s/"DEFAULT_THUMBNAIL_WIDTH = 350"/"DEFAULT_THUMBNAIL_WIDTH = 150"/g /usr/share/gnome-shell/extensions/dash-to-panel@jderose9.github.com/windowPreview.js 
sudo sed -i s/"DEFAULT_THUMBNAIL_HEIGHT = 200"/"DEFAULT_THUMBNAIL_HEIGHT = 100"/g /usr/share/gnome-shell/extensions/dash-to-panel@jderose9.github.com/windowPreview.js 

と実行した後、Alt + F2キーを押しrとだけ入力してEnterキーを押すとGNOME Shellが再起動されて設定が反映され、

f:id:sicklylife:20170709174601j:plain

こんな感じにサムネイルのサイズが小さくなる。
元に戻す場合は、

sudo sed -i s/"DEFAULT_THUMBNAIL_WIDTH = 150"/"DEFAULT_THUMBNAIL_WIDTH = 350"/g /usr/share/gnome-shell/extensions/dash-to-panel@jderose9.github.com/windowPreview.js 
sudo sed -i s/"DEFAULT_THUMBNAIL_HEIGHT = 100"/"DEFAULT_THUMBNAIL_HEIGHT = 200"/g /usr/share/gnome-shell/extensions/dash-to-panel@jderose9.github.com/windowPreview.js 

と実行すればOK。
ちなみにこれらのコマンドはSickly LifeのppaからDash to Panelをインストールしていないと実行できない(ファイルのパスを変更すればいいだけの話だけど)。

Ubuntu 16.04のKernelをより新しいバージョンにアップグレードする

Ubuntuでは基本的にFirefoxThunderbirdといった一部のアプリケーション以外はバージョンがアップグレードされることはない。
Ubuntu OSの中核であるLinux Kernelも自動的にアップグレードされることはないのだが、新しいカーネルを利用できるようにパッケージが用意されているので、Kernelをアップグレードしたい場合は手動でインストールする。

端末を起動して以下のコマンドを実行し、Ubuntuを再起動するとアップグレードされたKernelが利用できるようになる。

sudo apt install linux-generic-hwe-16.04 

上記のコマンドでインストールされるKernelのバージョンは2017年5月24日の時点で4.8.0.52.23となっているが、それよりも新しいバージョンをインストールしたい場合は以下のコマンドを実行する。

sudo apt install linux-generic-hwe-16.04-edge 

こちらのバージョンは4.10.0.21.14となっていて、さらに新しいバージョンが利用できる。
現在のKernelのバージョンを確認するには端末で以下のコマンドを実行する。

uname -a 

また、元のKernelに戻す場合は、まずUbuntu TweakやUbuntu Cleanerで古いカーネルを全て削除した後、以下のコマンドを実行して元のバージョンのカーネルをインストールし、

sudo apt install linux-generic 

続けて以下のコマンドを実行してインストールされている全てのKernelを確認、

dpkg -l | grep linux-image | grep ^ii 

一番古いバージョンのKernel以外を全て削除してUbuntuを再起動すればKernelのバージョンを元に戻すことが出来る。

#新しいバージョンのKernelを削除する一例
sudo apt purge linux-generic-hwe-16.04* linux-headers-generic-hwe-16.04* linux-image-generic-hwe-16.04* 
sudo apt purge linux-image-バージョン名-generic linux-image-extra-バージョン名-generic 

参考 : HWE (Hardware Enablement) カーネルを使う – talkwithdevices.com
参考 : 第278回 Ubuntuカーネルとの付き合い方:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

Ubuntuでzipを展開した時の文字化けを回避する

※2017年5月24日、バージョンアップ。

Windowsで内部に日本語を含むzipファイルを作成して、それをWindows以外のOSで解凍すると文字化けする、という話はMacユーザーやLinuxユーザーの間では広く知られていると思われる面倒くさいバグなのだが、今回その文字化けを何とかしてみようと思い、Nautilus用のスクリプトを作成してみた。
何で既に回避策が存在するのにそんなもの作ろうと思ったのか、という点についても一応下の方に書いておく。

スクリプトのダウンロードとインストール

まず以下のリンクをクリックするなどしてunarなどをインストールする。
apt:unar
apt:unrar
apt:p7zip-full

#コマンドを使う場合はこうする
sudo apt install -y unar unrar p7zip-full 

次に端末(gnome-terminal)を起動して、以下のコマンドを実行する。

cd ~/.local/share/nautilus/scripts/ && wget https://sicklylife.jp/tool/zip_mojibake_kaihi && chmod +x zip_mojibake_kaihi && mv zip_mojibake_kaihi zipを展開する\(文字化け回避\) && cd - 

するとファイル(Nautilus)の右クリックメニューにスクリプト > zipを展開する(文字化け回避)というメニューが追加されるので、zipファイルを右クリックしてそれをクリックすると、Windowsで作成したzipが文字化けすることなく展開される。
f:id:sicklylife:20170503125543p:plain

スクリプトを作った理由

Ubuntuでのzipの文字化け対策と言えば、Ubuntu Japanese Teamの日本語Remixを使うか、Ubuntu Japanese Teamのppaを使う方法が一般的だと思われるのだが、現在私が使用しているUbuntu GNOME 17.04 + Nautilus 3.24.1では以前と仕様が変わったらしく、Ubuntu Japanese Teamの文字化け回避策 (/etc/profile.d/unzip-default-charset.sh) を適用しても文字化けが直らないようになってしまっている。
f:id:sicklylife:20170503130159p:plain
Nautilus 3.24.1では↑このスクショのようにExtract Here(ここに展開する)がデフォルトになって、zip/7z/xzなどの圧縮ファイルをダブルクリックするとその場に展開されるようになり、しかも関連付けを変更しても反映されないという糞仕様になってしまっている。
file-rollerを起動してzipを開いて展開すれば(文字化け回避策を適用していれば)文字化けせずに展開されるが、いちいちfile-rollerを起動するのも面倒だし、右クリックからサクッと展開したかったのでスクリプト化してみた。来年のLTSまでに修正されるといいなぁ。

↓以下はスクリプトの中身。

#!/bin/bash
# unarでアーカイブを展開
#
# バージョン: 0.0.2
# ライセンス: GPLv2
# 作者      : Sickly Life
# 日時      : 2017年5月24日
# 備考      : unarだと文字化けが直らない場合があったのでunzipを使うように修正。
#             パスワードには未対応。
#             7zファイルは7zコマンドで展開するようにしているが、ほぼ未テスト。
# 参考      : shとbashでの変数内の文字列置換など - ろば電子が詰まっている (http://d.hatena.ne.jp/ozuma/20130928/1380380390)

RMFILE=/tmp/file.YcZCaYDRKQm3us9fFyTBphd9zYeycwRKFPKGCPvMSNejW4rF2EYaHKEiTAkhDmcjTWSaXxQtBh8AFrhXPNqiVcx8vJrZFZGR2kXosxGsWqdHPfLhMmhoj2f9QVS2ByLCWkkAQgtx3pR3oQXyTkZQc79Cg2uCVcYQ6Bx4CGCiczoEQrWsQe6kDeYoHPKoRww4kMPYpAxe*
TMPFILE=/tmp/file.YcZCaYDRKQm3us9fFyTBphd9zYeycwRKFPKGCPvMSNejW4rF2EYaHKEiTAkhDmcjTWSaXxQtBh8AFrhXPNqiVcx8vJrZFZGR2kXosxGsWqdHPfLhMmhoj2f9QVS2ByLCWkkAQgtx3pR3oQXyTkZQc79Cg2uCVcYQ6Bx4CGCiczoEQrWsQe6kDeYoHPKoRww4kMPYpAxe.$$
UNZIP_LOG_FILE=/tmp/file.YcZCaYDRKQm3us9fFyTBphd9zYeycwRKFPKGCPvMSNejW4rF2EYaHKEiTAkhDmcjTWSaXxQtBh8AFrhXPNqiVcx8vJrZFZGR2kXosxGsWqdHPfLhMmhoj2f9QVS2ByLCWkkAQgtx3pR3oQXyTkZQc79Cg2uCVcYQ6Bx4CGCiczoEQrWsQe6kDeYoHPKoRww4kMPYpAxe.unzip

rm -f $RMFILE

trap 'kill $(jobs -p); zenity --text-info --filename=$TMPFILE --title=展開終了 --width=600 --height=400; rm -f $TMPFILE; kill $$' EXIT
trap 'kill $(jobs -p); zenity --text-info --filename=$TMPFILE --title=展開終了 --width=600 --height=400; rm -f $TMPFILE; kill $$' ERR

if [ $# -gt 100 ]; then
    echo "ファイルの数が多すぎます。一度に展開できるファイル数の上限は100です。" &>> "$TMPFILE"
    exit 0
else
    declare -i num=$((100/$#))
fi

declare -i count=0

for arg
do
    name="${arg%.*}"
    ext="${arg##*.}"

    if [ "${ext,,}" = 'zip' ]; then
        unzip -Z -- "$arg" &>> "$UNZIP_LOG_FILE"
        grep 'number of entries: 1' "$UNZIP_LOG_FILE"; result=$?
        if [ "$result" = 0 ]; then
            truncate -s 0 "$UNZIP_LOG_FILE"
            unzip -o -O sjis -- "$arg" &>> "$TMPFILE"
        else
            sed -n '3p' "$UNZIP_LOG_FILE" | grep -E '^d'; result=$?
            if [ "$result" = 0 ]; then
                truncate -s 0 "$UNZIP_LOG_FILE"
                unzip -o -O sjis -- "$arg" &>> "$TMPFILE"
            else
                truncate -s 0 "$UNZIP_LOG_FILE"
                unzip -o -d "$name" -O sjis -- "$arg" &>> "$TMPFILE"
            fi
        fi
    elif [ "${ext,,}" = 'rar' ]; then
        unrar x -v -- "$arg" &>> "$TMPFILE"
    elif [ "${ext,,}" = '7z' ]; then
        7z x -- "$arg" &>> "$TMPFILE"
    else
        unar -- "$arg" &>> "$TMPFILE"
    fi

    echo >> $TMPFILE
    # unrar & unar
    sed -i "/... OK.\$/d" "$TMPFILE"
    # unrar
    sed -i "/All OK\$/d" "$TMPFILE"
    # unzip
    sed -i "/^   creating: /d" "$TMPFILE"
    sed -i "/^  inflating: /d" "$TMPFILE"

    count=$(($count+$num))
    echo "$count"
done | \
zenity \
    --progress \
    --title="展開" \
    --text="ファイルを展開中..." \
    --percentage=0 \
    --auto-close \
    --auto-kill

exit 0
#!/bin/bash
# unarでアーカイブを展開
#
# バージョン: 0.0.1
# ライセンス: GPLv2
# 作者      : Sickly Life
# 日時      : 2017年5月3日
# 参考      : shとbashでの変数内の文字列置換など - ろば電子が詰まっている (http://d.hatena.ne.jp/ozuma/20130928/1380380390)

RMFILE=/tmp/unar.YcZCaYDRKQm3us9fFyTBphd9zYeycwRKFPKGCPvMSNejW4rF2EYaHKEiTAkhDmcjTWSaXxQtBh8AFrhXPNqiVcx8vJrZFZGR2kXosxGsWqdHPfLhMmhoj2f9QVS2ByLCWkkAQgtx3pR3oQXyTkZQc79Cg2uCVcYQ6Bx4CGCiczoEQrWsQe6kDeYoHPKoRww4kMPYpAxe*
TMPFILE=/tmp/unar.YcZCaYDRKQm3us9fFyTBphd9zYeycwRKFPKGCPvMSNejW4rF2EYaHKEiTAkhDmcjTWSaXxQtBh8AFrhXPNqiVcx8vJrZFZGR2kXosxGsWqdHPfLhMmhoj2f9QVS2ByLCWkkAQgtx3pR3oQXyTkZQc79Cg2uCVcYQ6Bx4CGCiczoEQrWsQe6kDeYoHPKoRww4kMPYpAxe.$$

rm -f $RMFILE

trap 'kill $(jobs -p); zenity --text-info --filename=$TMPFILE --title=展開終了 --width=600 --height=400; rm -f $TMPFILE; kill $$' EXIT
trap 'kill $(jobs -p); zenity --text-info --filename=$TMPFILE --title=展開終了 --width=600 --height=400; rm -f $TMPFILE; kill $$' ERR

declare -i num=$((100/$#))
declare -i count=0

for arg
do
    ext="${arg##*.}"

    if [$ext = "rar"]; then
        unrar xv -- "$arg" &>> $TMPFILE
    else
        unar -- "$arg" &>> $TMPFILE
    fi

    echo >> $TMPFILE
    sed -i "/... OK.\$/d" $TMPFILE
    count=$(($count+$num))
    echo $count
done | \
zenity \
    --progress \
    --title="展開" \
    --text="ファイルを展開中..." \
    --percentage=0 \
    --auto-close \
    --auto-kill

exit 0