カテゴリー
Raspberry PI Model B+

デスクトップ・ページャーのショットカットキーを変更

動機

  • Raspberry PI (以下”ラズパイ”)LXDE – wikipedia というデスクトップ環境がバンドルされています。
  • 私は、パソコンから Xming を使い XDMCP 経由でラズパイのデスクトップへ繋ぐ事が多いので、デスクトップ・ページャーの切替えに割り当てられていた、デフォルトのショートカットが気に入りませんでした。
  • なぜかというと、それはWindowsキーと同時にファンクションキーを押すという割り当てだったので、LXDE へそのシーケンスが送られる前にWindowsのスタートメニューがポップアップしてしまうという大変都合の悪いものだったからです。
  • 私はこの設定を私にとって都合の良いものへ変更することを思いつき、先例を調べる為、ググったところLubuntuのキーボードショートカットの設定:openboxというブログの記事にめぐり合い、rcmdnk 氏の得がたい啓示を受けました。
  • ただし LXDE には GNOME や Xfce のようにキーボードのショートカットをカスタマイズするための、GUI がないので、設定情報の書かれたテキストファイルを代わりに編集する必要があります。

操作

    1. ssh などでラズパイへリモートログインします。
    2. カレントディレクトリをチェンジします。
cd ~/.config/openbox
    1. 既にある設定ファイルのバックアップを取得します。
cp lxde-rc.xml lxde-rc.xml.2015-02-15
    1. エディタで lxde-rc.xml を編集して保存します。結果の diff を次に示します。
pi@raspberrypi ~/.config/openbox $ diff -u lxde-rc.xml.2015-02-15 lxde-rc.xml
--- lxde-rc.xml.2015-02-15      2015-02-15 10:51:01.259615834 +0900
+++ lxde-rc.xml 2015-02-15 10:59:02.852644081 +0900
@@ -213,22 +213,22 @@
         <wrap>no</wrap>
       </action>
     </keybind>
-    <keybind key="W-F1">
+    <keybind key="C-A-1">
       <action name="Desktop">
         <desktop>1</desktop>
       </action>
     </keybind>
-    <keybind key="W-F2">
+    <keybind key="C-A-2">
       <action name="Desktop">
         <desktop>2</desktop>
       </action>
     </keybind>
-    <keybind key="W-F3">
+    <keybind key="C-A-3">
       <action name="Desktop">
         <desktop>3</desktop>
       </action>
     </keybind>
-    <keybind key="W-F4">
+    <keybind key="C-A-4">
       <action name="Desktop">
         <desktop>4</desktop>
       </action>
  1. これで望み通りの結果を得ることができました。

留意点

  • この投稿では、デスクトップ・ページャー切替えの記事しか扱いませんが、デフォルトで割り当てられている他のショートカットキーのカスタマイズにも方法的には有効なはずです。
カテゴリー
PHP プログラミング

お巡りさんの必要人数を求める

子供が小学6年生で、算数で数列を学んでいます。課題で次のような問題が出されました。

ある地域内で、複数の道路が互いに一箇所だけ交差するとして、各交差点に交通整理の警察官を配置した場合の必要人数を求めよ

図に示すと次のようなものです。

A_road 道路が1本、交差点なし
2_roads 道路が2本、交差点ひとつ
3_roads 道路が3本、交差点3つ
4_roads 道路が4本、交差点6つ
5_roads 道路が5本、交差点10個

つまり道路の本数を n、お巡りさんの必要人数を Kn と置いたとき、次の漸化式で表現することができます。

K_n=K_{n-1}+n-1 (ただしn > 0, K_0=0)

この手の問題はプログラムを作ることで、道路が数え切れないほどたくさんあっても一瞬に答えを出せることを教えようと、子供に PHPで作ってみな、といってみたものの少々難しかったようです。
アルゴリズムの部分だけ示すと下記のようなコードとなります。

$n = $_GET['numroads'];
printf("<p>Number of roads = </p>", $n);
$Kn = 0;
for ($i = 0; $i < $n; $i++)
{
	$Kn += $i;
}
printf("<p>Number of policemen = %d</p>", $Kn);

numroads にはフォームからユーザに入力してもらった道路の本数が格納されています。

実際に作ってみたフォームがこちらです。お粗末さまでした。

カテゴリー
Raspberry PI Model B+

Nginx で CGI を使えるようにする

  1. 必要なパッケージのインストール
  2. sudo apt-get install fcgiwrap spawn-fcgi
    
  3. 設定ファイル /etc/nginx/sites-available/default を編集
  4. pi@raspberrypi /etc/nginx/sites-available $ diff -u default.org default
    --- default.org 2015-01-11 14:28:27.657198270 +0900
    +++ default     2015-01-11 14:27:20.828190564 +0900
    @@ -77,6 +77,17 @@
            #location ~ /\.ht {
            #       deny all;
            #}
    +       # Userdir - cgi
    +       location ~ ^/~([^/]+)/(.+\.cgi)$ {
    +                if (!-f /home/$1/public_html/$2) {
    +                        rewrite ^ 404;
    +               }
    +               alias /home/$1/public_html/$2;
    +               fastcgi_pass unix:/var/run/fcgiwrap.socket;
    +               fastcgi_index index.cgi;
    +               fastcgi_param SCRIPT_FILENAME $request_filename;
    +               include fastcgi_params;
    +       }
            # Userdir - php
            location ~ ^/~([^/]+)/(.+\.php)$ {
                     if (!-f /home/$1/public_html/$2) {
    
  5. デーモンを再起動
  6. sudo /etc/init.d/fcgiwrap restart
    sudo /etc/init.d/nginx restart
    
  7. 動作確認用CGIスクリプトの準備
  8. cat > ~/public_html/does_work.cgi <<HERE
    #!/bin/bash
    
    cat << EOF
    Content-type: text/html
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <HTML>
    <HEAD>
    <META http-equiv="Content-Type" content="text/html; charset=iutf-8">
    <TITLE>Building a report</TITLE>
    </HEAD>
    <BODY>
    CGI works!
    </BODY>
    </HTML>
    EOF
    HERE
    
  9. パーミッションの変更
  10. chmod a+x ~/public_html/does_work.cgi
    
  11. ブラウザからURLを与えて動作確認
  12. http://IPADDRESS/~pi/does_work.cgi
    
  13. うまくいけばブラウザ上に次のような結果を得る
  14. cgi_works