サスペンドをショートカットに追加する(Ubuntu12.04)

PCが起動するのを待ちたくないので、いつもシャットダウンではなくサスペンドを使用しています。
Ubuntuにはサスペンド機能のショートカットや設定項目が存在しません。そこで、サスペンドを行うキーボードショートカットを Ubuntu に追加する設定をしました。

追記:Githubにてサスペンドのショートカットを簡単に追加できる bashスクリプトを公開しました。
サスペンドをショートカットに設定するスクリプト(簡易版)を実行した結果

サスペンドを行うためのコマンドを探し、それをキーボードショートカットに登録します。
環境は Ubuntu 12.04 です。

コマンドによるサスペンド

サスペンドのコマンドはこちらから。すぐに見つかります。
下記コマンドでサスペンド可能であることを確かめてください。
(注意:成功すればサスペンドします。失敗するとシステムが停止することもあり、再起動しなければならなくなるので注意してください。)
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

コメントによると、「pmiコマンドのソースを覗いたらこうやっていたよ」ということのようです。将来この方法が使えなくなった際に困らないよう、素直にpmiコマンドを導入しておいたほうが良いかもしれません。
とはいえ、上記コマンドを使用する今回の方法では、下記のインストールは不要です。
sudo apt-get install powermanagement-interface

また、検索によく引っかかる「 apt-get install hal 」も、Ubuntu 12.04環境では不要かと思われます。
すくなくとも私の環境では不要だったのですが、ハードウェア環境によっては必要になるのかもしれません。

当然ながら、通常操作によるサスペンドに失敗するハードウェア環境では、コマンドによるサスペンドも上手く行きません。事前に確認してください。


キーボードショートカットへの登録

コマンドライン上で gconftool-2 を使用して、ショートカットキーを設定します。
システムのキーボードからショートカットを追加してもよいのですが、今回はコマンドラインにて作業を行います。

以下のコマンドにて設定ファイルに書き込むことで、キーボードショートカットを使用することができます。


サスペンドのキーボードショートカット設定は以下の通りです。
#設定を書き込む前に、gconfデーモンを停止させておく
$ gconftool-2 --shutdown
#ショートカット設定の名前
$ gconftool-2 -t str --set /desktop/gnome/keybindings/custom1/name "サスペンド"
#割り当てるキー
$ gconftool-2 -t str --set /desktop/gnome/keybindings/custom1/binding "<CTRL><SHIFT><ALT>l"
#割り当てるコマンド
$ gconftool-2 -t str --set /desktop/gnome/keybindings/custom1/action 'dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend'


上記のコマンドを実行すると、ショートカットの情報を記録した設定ファイルが作成されます。
Ubuntu 12.04における設定ファイルへのパスはこちらに。
以下のコマンドで設定ファイルを見ることができます。
(Ubuntu 12.10から、設定ファイルのパスが変わっているようです。)
less  ~/.gconf/desktop/gnome/keybindings/custom1/%gconf.xml

上記の設定が追記されているのを確認できると思います。
「設定」からも、GUI上でショートカットキーが追加されているのを確認できます。

$ gconftool-2 --shutdown 」コマンドを打たずにショートカットキーを登録すると、gnomeデスクトップの表示がおかしくなる場合があります。
これは、ログアウトするか再起動すれば直ることがあります。
直らなかった場合、GConfの設定を、ディレクトリごと破棄すると解決します。
(下記のコマンドはバックアップを行っている。)
$ mv ~/.gconf/ ~/.gconf-back
デフォルト値にリセットするコマンドも存在するようですが、私の環境では上手くいきませんでした。

メニューバーなどの表示がおかしくなってしまったGnomeデスクトップ

デフォルトで存在するショートカット項目の設定は、別の場所に保管されているらしく、上記の設定削除を行ってもリセットされません。
また、デフォルトのショートカット項目と、カスタムショートカットでキーの割り当てが被る場合、デフォルトの項目が優先されます。
その他の設定ファイルおよびディレクトリのパスについては、以下が詳しいです。
http://docs.oracle.com/cd/E19253-01/819-0665/gconf-0/index.html


複数のショートカットキーを登録したい場合、gnoftool-2に指定する設定の custom1 の数字の部分を変更します。
シェルスクリプトで自動設定するならば、事前にキーの存在を確認して上書きを避けるように書くかと思います。今回は人間が作業したので、作業者が目視確認すれば十分でした。


シェルスクリプト版

おまけとして、以下にキーボードショートカット設定シェルスクリプトのサンプルを置いておきます。


#!/bin/bash
#キーボードショートカット設定スクリプト
#

#設定前にgconfデーモンを停止させておかないと、
#gnomeデスクトップ表示が乱れて元に戻らなくなることがある(Ubuntu12.04にて確認)
gconftool-2 --shutdown





#パスの custom* は、重複するものが他にあれば上書きされる。
#上書きを避けたければ事前にチェックする必要がある。
gconftool-2 -t str --set /desktop/gnome/keybindings/custom1/name "サスペンド"
gconftool-2 -t str --set /desktop/gnome/keybindings/custom1/binding "<CTRL><SHIFT><ALT>l"
gconftool-2 -t str --set /desktop/gnome/keybindings/custom1/action 'dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend'

gconftool-2 -t str --set /desktop/gnome/keybindings/custom2/name "タイマー撮影でスクリーンショットを撮る"
gconftool-2 -t str --set /desktop/gnome/keybindings/custom2/binding "<Super>Print"
gconftool-2 -t str --set /desktop/gnome/keybindings/custom2/action 'gnome-screenshot --delay=5'


以上です。

このブログの人気の投稿

GIMP2.8でイラストにペン入れを行う

squid3プロキシサーバの設定(Ubuntu13.10)

ubuntu13.04で無線LANが繋がらない場合の対処