Stumpwm に suspend と hibernate の導入
最近 Stumpwm の設定を割と放り出して不便と思いつつも suspend と hibernate を導入してませんでした。まぁ Common Lisp の勉強をしていたので本気で投げ出していたわではないんですが。
本題に入って、今回はタイトルにもある通り Stumpwm で運用している Debian に suspend と hibernate を入れました。とは言え作業的には大したこともしておらず、いつも通り他力本願でおこなっております。
今回は以下のページを参考にしました。感謝です。
とりあえず、hibernate が入ってなかったので apt で入れました。Debian にはパッケージで用意されているので存分に甘えます。後は visudo で suspend.sh では PASSWD 認証を求めないようにして Stumpwm 上での煩わしさを回避。
$ sudo aptitude install hibernate $ sudo visudo USERNAME ALL=(ALL) NOPASSWD: /usr/local/sbin/suspend.sh
別に NOPASSWD にすることもないかと思ったんですが、やはり suspend するのに一々 PASS 入力も煩わしいので。因みに最初はノート PC の蓋を閉じるだけで suspend するように設定してみたんですが、何故か蓋を一旦閉じて開かないと suspend しない為断念しました。解決策は未だ不明です。めんどくさいので先延ばしです。続いて .stumpwmrc の記述。
.stunmpwmrc
; --- sudo command definitions -------------------------------- (define-stumpwm-type :password (input prompt) (let ((history *input-history*) (arg (argument-pop input)) (fn (symbol-function 'draw-input-bucket))) (unless arg (unwind-protect (setf (symbol-function 'draw-input-bucket) (lambda (screen prompt input &optional errorp) (let ((i (copy-structure input))) (setf (input-line-string i) (make-string (length (input-line-string i)) :initial-element #\*)) (funcall fn screen prompt i))) arg (read-one-line (current-screen) prompt)) (setf (symbol-function 'draw-input-bucket) fn *input-history* history)) arg))) (defmacro define-sudo-command (name command &key output) (let ((cmd (gensym))) `(defcommand ,name (password) ((:password "sudo password: ")) (let ((,cmd (concat "echo '" password "' | sudo -S " ,command))) ,(if output `(run-prog-collect-output *shell-program* "-c" ,cmd) `(run-prog *shell-program* :args (list "-c" ,cmd) :wait nil)))))) ;; define command (defcommand hibernate () () (run-shell-command "hibernate")) (defcommand suspend () () (run-shell-command "sudo suspend.sh")) ;; set key-bind (define-key *root-map* (kbd "C-s") "suspend")
最初に出てくるごっつい塊二つは sudo を Stumpwm のコマンドに対して使用するためのものです。これで NOPASS を通していない hibernate もコマンド入力で実行できるようになります。因みに reboot や shutdown も登録しておけば勿論動きます。
defcommand で Stumpwm 上でのコマンドを定義しているのでここで hibernate と suspend が Stumpwm に認識されるようになりました。後はキーバインドにコマンドを設定すれば簡単に suspend できるようになります。さすがに 1 ストロークで suspend されては困るので、 *root-map* に登録設定しました。これで Ctl-t, Ctl-s と入力すれば suspend できます。後は設定を loadrc で読み込み直せばいつでも hibernate && suspend できます。
次は mode-line でもやろうかな。