2013年1月15日

Nautilus をスーパーユーザー権限で使う

Ubuntu を使っていると、権限のないディレクトリでのファイルの扱いや設定ファイルの書き換え等、細かいところでスーパーユーザー権限が必要になる事が多い。これらは端末にコマンドを入力することで対処出来るが、グラフィカルに Nautilus ファイルマネージャを使って対処する方法もある。

・Ubuntu Tweak を使って Nautlius の機能を拡張する

Ubuntu の設定ツールである Ubuntu Tweak を使えば簡単に Nautilus の機能を拡張できる。 Ubuntu Tweak は様々な Ubuntu の設定を行うことが出来る便利なツールだが、今回は Nautilus をスーパーユーザー権限で使う為の機能拡張に使う。インストールしていない場合はまずインストール。

$ sudo add-apt-repository ppa:tualatrix/ppa
$ sudo apt-get update
$ sudo apt-get install ubuntu-tweak

・Nautilus の右クリックメニューにスクリプトを追加

Ubuntu Tweak を起動したら、「システム設定」から「スクリプト」の項目を選択する。


ここで Nautilus のスクリプトを設定できる。左側の「無効なスクリプト」から使いたいものをドラッグアンドドロップで「有効なスクリプト」上の nautilus-scripts フォルダ下に配置すると、そのスクリプトが Nautilus で使える。 Nautilus をスーパーユーザー権限で便利に使うには、「管理者として参照」や「お気に入りのテキストエディタで開く (root権限)」のスクリプトを追加すればよい。「管理者として参照」は、選択したディレクトリやファイルをスーパーユーザー権限で開く事が出来る。開いたものがディレクトリなら、そのディレクトリをフルアクセス出来る。「お気に入りのテキストエディタで開く (root権限)」は選択したファイルをスーパーユーザー権限のテキストエディタで開く。これは書き込み権限のない設定ファイルの編集に役に立つ。フォルダを作ればスクリプトを階層上にまとめる事が出来るので、スクリプト別にまとめておくと整理される。


設定後、Nautilus の右クリックメニューから有効にしたスクリプトが使用可能になっている。


自分でスクリプトを作る

Nautilus の右クリックメニューから「スクリプト」を選んで、「このフォルダーを開く」を選択する。するとスクリプトのディレクトリ(メニューにスクリプトの項目がない場合は /home/ユーザー名/.local/share/nautilus/scripts を直接参照)が開くので、ここに手動でシェルスクリプトを追加できる。

この手段でスクリプトを呼び出した時、 Nautilus が自動的に選択したファイルやカレントディレクトリの URI を変数に設定してくれる。これらの変数はスクリプトの作成に便利だ。

NautilusScriptsHowto

・「管理者権限で開く」(Ubuntu Tweak に頼らない版・追記)

アップグレードするごとに仕様がコロコロ変わる Ubuntu において、Ubuntu Tweak のサポート状況も怪しくなってきているので、 Ubuntu Tweak に頼らず実行可能な「管理者権限で開く」スクリプトも作ってみた。単純にディレクトリとテキストファイルをそれぞれ nautilus と gedit で開く(一度の選択で複数を開く必要はないと思われるので一つを選択した時のみ開く)。

#!/bin/bash

FILE_MANAGER=nautilus
EDITOR=gedit

PRE_IFS=$IFS
IFS=$'\n'
path=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS

is_TEXT() {
    echo `file $1 | grep "text"`
}

if [ -d $path ]; then
    gksudo $FILE_MANAGER $path
elif [ -f $path -a `is_TEXT $path` ]; then
    gksudo $EDITOR $path
fi

IFS=$PRE_IFS

テキストファイルのチェックは file コマンドを利用してその情報に text の文字が含まれていたら開く、という単純な仕組み(よってテキストなのに開けないものもあるかもしれない)。 IFS を操作しているのはスペースの含まれたファイル名に対応するため。

・選択したディレクトリ及びファイルの「名前に含まれるスペースをアンダーバーに置換」

このスクリプトは選択したすべてのディレクトリ及びファイルの名前に含まれるスペース(" ")をアンダーバー("_")に置換し、コマンドライン上で参照可能にする。

#!/bin/bash

PRE_IFS=$IFS
IFS=$'\n'
paths=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS

replace_space() {
    echo `basename "$1" | tr " " "_"`
}

for path in $paths; do
    mv $path `replace_space $path`
done

$IFS=$PRE_IFS

・rootのゴミ箱のアクセス

スーパーユーザー権限を使ってゴミ箱に移動したファイルは /root/.local/share/Trash にある。この場所にはアクセスがしづらいので、 rootのゴミ箱にアクセス出来るスクリプトを作ると便利だろう。

「rootのゴミ箱を開く」

#!/bin/bash

gksudo nautilus /root/.local/share/Trash/files

rootのゴミ箱のディレクトリを開く。スーパーユーザー権限でゴミ箱に移動したファイルはここにあるので、復元する場合はここから移動させればよい(権限に注意)。

「rootのゴミ箱を空にする」

#! /bin/bash

gnome-terminal -e 'sudo bash -c "rm -rf /root/.local/share/Trash/{files,info}/* /root/.local/share/Trash/{files,info}/.*"'

このスクリプトは実行すると一旦端末を開いて、そこから sudo で bash を実行する。 rm -r /root/.local/share/Trash でディレクトリを強引に削除しても、ゴミ箱にファイルを移動させると新しくディレクトリが作られるので大丈夫かもしれない。

2 件のコメント:

  1. リポジトリ(↓)の追加が必要であることも記載した方が良いのでは? 
    deb http://ppa.launchpad.net/tualatrix/ppa/ubuntu trusty main

    返信削除
    返信
    1. 痛み入ります、今更ですが追加しました

      削除