Nautilus」タグアーカイブ

Nautilus 3.16 scripts folder

Nautilus 3.16 には色々困った。

拡張スクリプトの順番が滅茶苦茶になってしまった。
最初は更新日時順だったがリネーム等をしているとワケワカに。
名前順に変更しようと手段を探しているができないみたい。

しかも更に何を今更ファイル名のアンダーバーをニーモニックにするとは。
いや、ニーモニックは便利だけど矢印キーで充分だったし。

nautilus_script_sort

しかたがないのでこうしてみた。
私的にファイル名にアンダーバーが使えないって凄く不便。
ファイル名はマイナス記号で代用できるけど順番は名前順にしてほしい。

更に詳細表示に変更したらナンジャコリャ!
月とかはしっかり日本語になっているけど昨日は Yesterday。
年月日は何故か US フォーマットで表示、勘弁してよ

listview

それと何故だかわからないけど。
設定ダイアログをマウスで移動すると本体がくっついてくる。
他のアプリではそうならない、詳細表示の表示確認ができなくて困る。
しかも設定ダイアログを出すと二回に一度は Nautilus が落ちる。

あと Nautilus を 2 つ立ち上げてファイルを DnD するときだけど。
ドラッグ時にサイドバーが一々反応するようになった、それも敏感に。
3.14 まではこんな動作しなかったはずなんだが。
これじゃ上下でしか DnD できない、おまえは Explorer か!
Windows の悪い所なんかマネしないでくれよ。

Gedit も少し変。
終了時に保存していないダイアログを [はい] にしても終了はしない。
保存したタブ分が残るのは仕様変更なのだろうか?

致命的なバグは無いけど正直使い辛くなった。
でもこういうのは多分次バージョンまでこのままだと思う。

次回からプログラミングネタに戻る予定。
GtkBuilder なんてのがあるらしいし。

iPhone mount in GNOME

iPhone に XPERIA から乗り換えました。
筆者がまず行うことは当然 Linux との接続ですよね。
普通に付属 USB ケーブルで接続してみた。

connect1

connect2

Shotwell で普通に画像を取り込める。
Rhythmbox も多分使えると思う、ごめん音楽を最近まったく聴かないので。
Nautilus で開くことも普通に可能です。

iphone_afc

AFC (Apple File Connection) プロトコルで接続しているようです。
AFC – The iPhone Wiki

やはり別途ドライバ等は不要、接続アイコンまで専用が用意されている。
最近の Linux って超マニアックな周辺機器や業務機器でもなければデフォルト状態でもあたりまえのように認識し接続してしまうよね。
何故ユーザーがあまり増えないのか不思議でしかたがない。

でも [iPhone 上のドキュメント] 部には何もコピーできなかった。
[iPhone] は Media 部をマウントしてるようだけどココは何だろう?

picture

画像は DCIM/100APPLE 内にあった。
ホームボタン + 電源ボタンのスクリーンショットは PNG なんだね。
こちらは Nautilus から普通にコピーできた、私的にはコレさえできれば十分。
Bluetooth 必要ないや。

まあつまり、Linux ユーザーは Mac を用意せずとも iPhone は問題ないよと。

File manager for Xubuntu and Lubuntu 13.04

Nautilus は USB メモリ、デジカメ、スマートフォンを自動マウントできる。
携帯音楽プレイヤーの接続なら Rhythmbox、又は選択肢になるはず。

別途ドライバは一切不要、何も考えず USB ケーブルを差し込むだけで自動認識。
Windows のようにウザいだけのユーティリティアプリを導入する必要が無いのが嬉しい。

nautilus

余談だがファイルマネージャは GUI だけでなく実際のファイル管理も行っている。
つまり Nautilus 採用のディストリビューションであればマウントは保証できる。
筆者は Fedora で GNOME3 を愛用しているが当然 Ubuntu も同様である。

はて?
Xubuntu や Lubuntu では自動マウントはどうなるのかな?

五年以上 GNOME しか常用していない、というかメインは Fedora だし。
常用するデスクトップなら最低デジカメくらい自動マウントしてほしいし。

ということで。
せっかく Ubuntu の動作確認マシンを買ったのだから試してみることにする。
KDE 及びその他デスクトップ環境については他の人にまかせる。
メニューが超カオスになるので後から KDE 化するのだけは勘弁して。

sudo apt-get install lubuntu-desktop
sudo apt-get install xubuntu-desktop

起動して切り替えて USB メモリ、デジカメ、スマホを接続してみる。

Lubuntu @ PCManFM

pcmanfm

Xubuntu @ Thunar

thunar

あれ、コレらどのデスクトップでもマウント可能だったのか。
Ubuntu からコマンドで導入したので単体インストールの場合は保証できないけど。
PCManFM は何故か2つづつ表示されるけど。
Thunar は USB メモリ以外はアンマウントボタンが出ないけど。

とにかく素の Ubuntu からの変更であればスマホもデジカメも自動マウントできます。
常用可能なデスクトップ環境の選択肢が増えた、やったね。

ユーティリティアプリが必要ない人ならパソコンは Linux にしたほうがいいよ。
特にデジカメ画像で拡張子のみ小文字に変更したい場合に Linux は普通にできるし。
うっかり画像の拡張子を消してしまっても普通に画像と認識してくれるし。

********************

ついでに Alt+F1, Alt+F2 動作のチェック。

Lubuntu, Xubuntu 共 GNOME2 とまったく同じ。
具体的には Alt+F1 でメニュー、Alt+F2 で一行コマンドランチャ。

alt_f2

コマンドランチャは自動保管があり選択肢が残り一つになると全部コマンドが流し込まれる。
そのまま Enter で実行、そういえば GNOME2 はそうだったと思い出す。

ちなみに GNOME3 の Alt+F2 は端末と同様に Tab キーを叩くと保管に変わっています。
Alt+F1 は選択状態になった時点で Enter するだけで実行できる。

Unity だけ一切保管できない、何故クリックすることを強要する UI なのだと。
(Amazon 広告をクリックさせるため意図的なのだろうと憶測できるが)
筆者が Unity を避ける最大の理由でもあります。
コレに言及している人が少ないというより見たことが無いのが本当に不思議。

ただ私の環境だけかもしれないけど Xubuntu の Alt+F2 は異様に遅い。
もしかして保管用 GtkListStore を都度作成しているのだろうか?

しかし XFCE, LXDE 共 GNOME2 を参考にしているので操作性はほとんど変わらない。
Xubuntu は合成処理が使えるのが利点だが上記のように少し重い場面が多々ある。

というか Lubuntu が軽すぎる、軽くしたいのなら Lubuntu だけでいい。
両方入れるとメニューがカオスなことになるのでなるべく増えないようにしたいし。
それと XFCE は Ubuntu アプリとランチャが共通名な場合が多いので混乱しそう。

削除は下記でイケるようです。
Getting Back to a Pure Gnome on Ubuntu

********************

ついでに GNOME3 化もやってみる。

sudo apt-get install ubuntu-gnome-desktop ubuntu-gnome-default-settings

インストール途中で gdm の選択になる。
lightdm だと Ubuntu デフォルトのログイン画面、名前のとおりチョッピリ軽い。
gdm を選択だと Fedora と同じ GNOME デフォルトのログイン画面になるようだ。

gdm を選択して再起動、あぁ完全な GNOME3 になった。
SE Linux が無いので Fedora より軽い、ソレをどう見るかだが。

ただ Unity に色々と干渉してしまう、今の Unity は GTK3 ベースだから当然か。
なので完全に GNOME3 化してしまいたい場合以外は行わないほうが良さそう。
強制フォールバックの選択肢が無いことに笑える。

Xubuntu, Lubuntu は GTK2 ベースなので完全な別物として共存できる。
それぞれメリットとデメリットがあるので後はお好みで。

しかし Fedora なら GNOME3 一択で他を試そうとは全然思わないのだが。
筆者の場合は GTK3 と Python 使いだからというのが一番の理由だけど。
xubuntu の検索ワードでイッパイ人が来ている現実を見るとやっぱりみんな…

Empty the trash from PyGI

我が公開 Linux アプリでまだ PyGI 化していないものがあった。
trash だ、しょーもないアプリだと思って作ったが意外に本人は結構使う。

PyGI 化だけだと二分で終わるし何かないかな。
そうだ、ゴミ箱を空にするオプションを付けちゃえ!
実際にそんな機能を使うかどうかは別の話。

Nautilus のソースを参考にすれば多分手段は解るだろう。
ということでソレっぽい名前で grep しまくる。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

"""
    Empty the trash.
"""

from gi.repository import Gio

# Get Trash URI
trash_uri = Gio.file_new_for_uri("trash:")
# Get Child
enum = trash_uri.enumerate_children(
        "{0},{1}".format(
            Gio.FILE_ATTRIBUTE_STANDARD_NAME,
            Gio.FILE_ATTRIBUTE_STANDARD_TYPE ),
        Gio.FileQueryInfoFlags.NOFOLLOW_SYMLINKS,
        None )
# Delete
for info in enum:
    f = trash_uri.get_child(info.get_name())
    f.delete(None)

こんな感じでやっていた。
当然元の C 言語はもっと複雑だったけど Python は楽だ。
普通に g_file_delete しているだけなんだな。

Nautilus から Ctrl+L でロケーションバーを表示させる。
んで trash: と打ち込んで Enter するとゴミ箱が開くんだね。
Explorer の sendto みたいなことができたのか、知らなかった。

んでファイルリスト作成と同様に enum を得る。
g_file_get_child でゴミ箱内の GFile を個別で得る。
既に GFile なのでそのまま g_file_delete できる。

パス名に変換して rm コマンドに渡すとか最初は考えていたけど不要だった。
Nautilus のゴミ箱アイコンは監視しているようでしっかり連動する。
何かメッセージを送らないといけないかと思ったけどコレも不要だった。

より手段は解った。
あとはコマンドラインオプションをどう実装するか。

15.4. optparse ? より強力なコマンドラインオプション解析器 ? Python 2.6ja2 documentation

こんな便利なモンが標準モジュールにあったのか!
使わないと損だ、ということで適用。

ただバージョン情報を -V, –version にしようと思ったけど手段が無い。
書くまでもなく Python と同じにしたかっただけですけど。
自前で –version を定義するとコンフリクトしていると怒られる。
素直にあきらめよう。

ということで trash-1.0.0 公開。
全アプリの PyGI 化完了、去年からの目標だったけど長かった。

Linux shift-jis zip file

とある ZIP を展開しようと思ったら Shift-JIS ファイル名を使っていて展開できない。
Ubuntu 日本語 Remix 付属の /usr/bin/zip なら展開できるのだけど Fedora だし。
仮想マシンの Ubuntu から頂いて、と思ったけど我が Fedora は 64bit だった…

仮想マシンな Windows XP から共有を利用して展開。
とソレだけの理由で仮想 Windows を立ち上げるのも面倒だ。
そういえば Python には zipfile モジュールがある、作ってみよう。

とりあえず日本語のドキュメントを探してみた。
13.4. zipfile ? ZIP アーカイブの処理 ? Python v2.6.2 documentation
extractall なんて便利なメソッドがあるじゃん、これは簡単そうだ。
ということで Nautilus スクリプトにしてみた。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import zipfile
import os

filenames = os.environ["NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"].split("\n")

for f in filenames:
    z = zipfile.ZipFile(f)
    z.extractall()
    z.close()

こんなに単純なコードでいいみたい。
ファイル名は見事に化けてしまいますが展開だけは成功する。

そういえばパスワード付きの場合もある。
GTK+ でダイアログでも出して入力すればいいかな。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import zipfile
import os
import gtk

filenames = os.environ["NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"].split("\n")

for f in filenames:
    z = zipfile.ZipFile(f)
    dlg = gtk.Dialog("password", None, 0, (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
    def dlg_ok(self):
        dlg.response(gtk.RESPONSE_ACCEPT)
    entry = gtk.Entry()
    entry.connect("activate", dlg_ok)
    dlg.vbox.pack_start(entry)
    dlg.show_all()
    dlg.run()
    p = entry.get_text()
    dlg.destroy()
    z.extractall(pwd=p)

展開が終了するまでダイアログが閉じないのは何故だろう…
それと展開は死ぬほど遅い…

せっかく作ったけど素直に仮想 Windows から展開するとかのほうが良さそう。
まあ使いたくなる場合もあるだろうからスクリプト登録だけはしておくか。

ところで今頃気がついた。
Nautilus スクリプト位置にディレクトリを作れば入れ子にできるんだね。

まだまだ増やしても大丈夫そうだ。