My Daily Programming Life...

Showing posts with label Tips. Show all posts
Showing posts with label Tips. Show all posts

apt-getのファイルのインストール先表示

apt-getでインストールしたパッケージのインストール先一覧を用事するには以下のコマンドを使うらしい。

 > dpkg -L packagename

答えにたどり着くまで結構時間がかかった。

Linuxを少しずつ使い始めてから2週間。おそらくUbuntuというよくできたディストリビューションのおかげだと思うが、不便であることはない。むしろ、いろいろできて便利だ。

Ubuntuではapt-getというコマンドを使ってパッケージというのをインストールしてソフトウェアの管理をするらしい。Windowsでいうところの、「プログラムの追加と削除」だ。で、いろいろインストールして、そのインストールしたファイルを確認する必要があったのだけれど、ファイルがどこにあるのか分からないという自体が発生した。
Windowsは基本的にプログラムのファイルは全部"Program Files"にインストールされるし、そうでなければ、Cドライブ直下などのわかりやすい場所にあるし、迷うことはない。
慣れの問題なのかもしれないが、はっきりいってLinuxはどこにインストールされるのかが全然わからない。一つのプログラムがいろんなところに散らばってインストールされるというのも、長年Windowsを使っているとなんだかよく分からない。長年使っていれば、実行ファイルはここで、設定ファイルはここで、と分かるのかもしれない。

とは言っても、apt-getというコマンドがあるんだから、きっとパッケージのインストール先一覧を表示してくれる機能があるだろうと思って、apt-getの使い方を見たけど、インストールやらアンインストールのかの操作しかできない。

apt-getをたよりにWebの検索をしてしまうと意外にこの答えにたどり着けない。結構時間がかかってようやくdpkgでそれができると分かった。

apt-getコマンドを使うんじゃないのか。なんだか分かりにくいなぁなんて思うけど、結局慣れの問題だ。apt-getはその名のとおり取ってくるだけなのか。

Ubuntuでキーボードの配置変更方法

環境はUbuntu 10.4

xmodmapを使えばキーを入れ替えられる。

設定ファイルを指定して
> xmodmap file

とコマンドを入れればよい。設定ファイルの中身は、たとえば、CtrlとCapsを入れ替えるなら


remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L

と書かれた「file」を用意すればよい。ただし、gnomeの場愛、xmodmapを使わなくても入れ替える機能がある。「システム」->「設定」->「キーボード」->「レイアウト」->「オプション」->「Ctrlキーの位置」といくことで、Capsとの入れ替えを選べる。なので実際にxmodmapの使い方は、この「オプション」のリストに内容なキーの入れ替えを行いたい場合に使うのが良さそう。

今回は、日本語キーボードの「無変換」を「Windowsキー」と同じ挙動をさせようとした。Gnomeの場愛「Windowsキー」は「Super」というKeysym(キーの名前)になっているようで、これを使うといろいろショートカットが設定できるで、スペースのすぐ左にある「無変換」をこのキーとして利用できるのは便利だ(それに、個人的にWindowsでもそのような設定にしているからそうしたい。)

設定ファイルには
keysym Muhenkan = Super_L
とした。(各キーがどのようなコードだったりKeysymに割り当てられているかはxevコマンドで確かめられる。)
設定ファイルの書き方はここが詳しい

さて、しかし、これだと毎回ログインの度にこのコマンドを行わなくてはいけない。
Ubuntuの場合ログイン時に勝手にこのxmodmapを読み込んでくれるようになっている(UbuntuというよりGnomeの機能か)
ホームディレクトリに「.Xmodmap」というファイルを作成して置いておく。その中にキー設定を書いておけばよい。
このファイルを作って再ログインすると、下のようなダイアログが表示される。


「.Xmodmap」を選択して「読み込む」をクリックして、自動的に読み込まれるようにする。「次回からこのメッセージを表示しない」をチェックしておけば、それいこう「.Xmodmap」がログイン時に自動的に読み込まれる。あとは好きなようにこのファイルを設定すればよい。

ところで、このダイアログでの設定はどこに保存されているんだろうか、と疑問になり、それも調べた。実は、自分でやっているときに、このダイアログが表示されて何も読み込まない設定にして、OKを押してしまった。それ以降ダイアログは出ないし、どこで読み込む設定をしてよいのか結構時間がかかった。

この設定にはgconf-editorを使う。ターミナルから、そのまま起動すれば出てくる。


Windowsでいうならレジストリみたいな感じだろうか。ツリーから
「desktop」->「gnome」->「peripherarls」->「keyboard」->「general」
を選んで、その中の二つの値を見る。
「known_file_list」と「update_handlers」の二つ。
「update_handlers」は起動時に読み込むファイル名を書けばいいらしい。リストなので複数のファイル名を書き込める。あとから、他にも読み込むファイルを追加したい場合にはここに書けばよい。

「known_file_list」はおそらく先ほどのダイアログに出てくるすべてのファイルのリストだと思う。このリストを空にすると、また起動時に読み込むファイルを選択するダイアログが表示されるようになる。

これで、読み込むファイルを変更したくなったりしてもまたできる。

screenコマンドでVisual Bellを無効にしたいとき

最近Ubuntuを使い始めていろいろやっている。Linux自体まともにクライアントとして使うのは初めてで、いろいろ設定して使いやすくしている中で、問題がでてくるので、解決したものからブログに。

環境はUbuntu 10.4

screenコマンドは一つのターミナルで複数の対話シェルを使えるようにするようなものだけれど、切り替えたときから、VisualBellが有効になってしまっていて、ちょっと間違えると画面がチカチカしてよくない。

最終的に行き着いた結論は
$HOME/.screenrc
を作成しその中に
vbell off
と書いておくこと。これでscreen起動時にこれを読み込んでVisualBellをオフにしてくれる。


(2010/10/23 .screen -> .screenrc に修正。間違ってた。)

MacでHHKBキーボード

iPadの購入を機に、ちょっと昔買ったMac Miniをいじっている。
キーボードはHHKBなんだけど、なんか接続すると英文字列入力時に配列がAsciiになってしまう。
Shift + 2が@になる感じ。
僕はずっと日本語キーボード配列だから、そうしたい。
でもなんだかぜんぜん設定いじってもできず、かれこれ数ヶ月放置していた。

んで今回、またチャレンジ。
http://plus-alpha-space.cocolog-nifty.com/blog/2009/12/windowsjisleopa.html
ありました。やりかた。
ただ、・・・なんでこんなに難しいことしなきゃいけないのって感じはするけど。

しょうがない。やりました。慣れないファイルシステムやらなんやらで、とにかく時間がかかった。
(Finderでルートディレクトリを見ても、ターミナルから見るルートディレクトリと様子が違うのはなんで?見る人が見れば一緒なのか)

でも、くじけずがんばった。意味わからないところだらけだけど、やった。

できた!

これからちょっとずついじっていく。次はOpenLDAPのインストールに挑戦

BLOGGERでFTP公開ブログに最近のコメントを載せる

ブログを少し改良した。Recent Commentsというのをサイドバーにのせるようにした。
そんなの最近のブログなら当然できるだろと思うのが普通だと思うのですが、
BLOGGERを利用していて、それをFTP公開(自分のサーバーを利用して使う)場合には簡単にはいかない。基本的には、最近の投稿とアーカイブの部分のサイドバーしか用意されていない。ラベルとかもない(これは後で付ける予定)。

さすがに最近のコメントというのはほしいと思って、探したら見つかった。
http://www.bloggerbuster.com/2008/06/update-ftp-blogs-do-publish-comment.html
要点は、JavaScriptを使って、Blogspotにある、自分のブログのフィードを読み込んでそれをそのサイトに合わせて表示させるということ。自分のブログのフィードのありかは上のサイトにかいてあるように、一定の形をしていて、自分のBlogIDというものを入れればアドレスができあがる。BlogIDはダッシュボードに入ったときにURLにblogID=...と表示される20桁ぐらいの数字。

あとは、上のサイトで公開されているJavaScriptを使って、その部分にスクリプトを埋め込めばいいだけ。

このブログではスクリプトそのままだと見た目がおかしかったのでスクリプトで出力しているタグを少し修正した。

Windowsキーを無効にする

今作っているソフトで、一時的にWindowsキーを無効にしたいときがあった。
普通だとスタートメニューが表示されたり、ショートカットがいくつか使えたりするけど、
Windowsキーを利用するアプリを作っていて、自分のウィンドウにフォーカスがあるときだけはWindowsキーを無効にしたかった。

とりあえずその方法

まずは単純に無効にする方法。キーボードフックを利用すればよいらしい。

hHook = SetWindowsHookEx( WH_KEYBOARD_LL , WinKeyHook , hInst , 0 );

以下のURLを見れば全体が書いてある。
http://www.programmersheaven.com/mb/windows/344596/344596/how-to-disable-the-start-menu-button/

で、そこから、自分のウィンドウにフォーカスがあるときだけという条件を付けるカスタマイズ
フック関数を以下のようにする

LRESULT CALLBACK WinKeyHook(int code, WPARAM wparam, LPARAM lparam)
{
PKBDLLHOOKSTRUCT key = (PKBDLLHOOKSTRUCT)lparam;
DWORD pid=0;

switch(wparam)
{
case WM_KEYDOWN:
case WiM_KEYUP:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
if(key->vkCode==VK_LWIN || key->vkCode==VK_RWIN){
GetWindowThreadProcessId( GetForegroundWindow() , &pid );
if( GetCurrentProcessId() == pid ){
return 1;
}
}
}
return CallNextHookEx(NULL, code, wparam, lparam);
}


これで自分がフォアグラウンドにいるときはWindowsキーが無効になる。
ただし、自分自身のウィンドウもWindowsキーのイベントを取得できなくなるので注意。
自分も必要な場合は・・・これからどうするか考えます。

WDKビルドコマンドライン

WDKでデバイスドライバ開発を行っていて、おそらく誰もが不便に感じることは、
ビルドが基本的にはコマンドラインからしかできず、しかも、そのコマンドライン環境はスタートメニューのBuild Environmentから選択しなくてはいけないこと。
これだけなら、ショートカット作ればまあいいやですむのだけれど、問題はその先で、
コマンドラインで、ビルドするためのフォルダに移動しなきゃいけない。
かなり面倒くさい。
このBuild Environment用のスクリプトsetenv.batは第一引数にWDKのホームディレクトリを指定しなくてはいけなくて、しかもスタートのディレクトリをそのディレクトリにするようなスクリプトになっている。

エクスプローラから、今開発しているプロジェクトのフォルダを見て、右クリックからそのフォルダをスタートとして、Build Environmentを使えるようにしたい。

というわけで、setenv.batを改造して作りました。
mysetenv.batというバッチファイルで、これは/DIRオプションを取ることができて、スタートフォルダをその指定されたフォルダにします。
mysetenv C:\WDK\Version x86 chk w2k /DIR D:\MyProject
こんな感じで使います。 /DIRの位置はどこでもかまいません。

さて、こうしたところで、エクスプローラから簡単にその位置でBuild Environmentを開けるわけじゃないので、さらにここでお気に入りツールLopeSoftのFileMenu Toolsを使います。これを使ってフォルダの右クリックメニューにコマンドを追加。コマンドプロパティで
Programを C:\WINDOWS\system32\cmd.exe
Argumentsを /k C:\WinDDK\6001.18002\bin\mysetenv.bat C:\WinDDK\6001.18002\ chk x86 W2K /DIR %FILENAMES%
というような感じで指定します。
これでそのフォルダでW2K Checkedビルド用環境が立ち上がります。
後はそこでbuildコマンドをたたけばいいだけ。うーん、すてきだ。

buildまで一気にやってしまうオプションをさらに用意して、それも右クリックメニューに追加しておいてもいいかもしれない。

setenv.bat
Bloggerはファイルを添付できないってことを今知りました。しょうがないのでGoogle Docで共有です。ファイルはtextなので、拡張子をbatに変更してください。

Google Desktopのショートカット

GoogleデスクトップはCtrlを2回押すとサーチボックスが出てくるのだけれど、そこでのショートカットを発見したのでメモ。
Web探したけど、一覧が載ってないような・・・。正式な機能じゃないのかな。

サーチボックスに文字を入れた状態で、
Ctrl + P : Google Map検索
Ctrl + D : Desktop検索
Ctrl + I : Image検索
Ctrl + N : News検索
Ctrl + U : Group検索
Ctrl + W : Web検索(Enterと同じ)
Ctrl + A : サーチボックス終了(Ctrl 2回と同じ)
Ctrl + H : Backspace
Ctrl + [ : 入力文字全消去(Escと同じ)

最後の二つはなんとなくviっぽい感じ。
Ctrl + P はかなりほしかったものなので、うれしい発見。

NICに二つのIPAアドレスを持たせる

Linuxで一つのNICに二つのIPアドレスを振りたいときIP Aliasというのが使える。
今192.168.1.10というアドレスがeth0に割り当てられているとして
/etc/sysconfig/network-scripts/のifcfg-eth0をifcfg-eth0:1という名前でコピーする。
そして、ifcfg-eth0:1というファイルの以下の該当部分をこんな風に変える。
DEVICE=eth0:1 # デバイス
IPADDR=192.168.1.11 # IPアドレス

これで、eth0:1というデバイスができて、それが192.168.1.11に割り当てられる。
あとは
ifdown eth0
ifup eth0
(再起動)
をするだけ。

Apacheのバーチャルホストとかやる場合にも使える。
僕はよく自分のテスト環境で利用している。

よく使いそうなrpmコマンド

- インストール
rpm -ihv test.rpm

- アップグレード
rpm -U test.rpm

- パッケージ情報の取得
rpm -q package-name

- インストール済みのパッケージ一覧表示
rpm -qa

- ある名前(部分一致でも)のパッケージがインストールされているか表示
rpm -qa | grep partial-name

- パッケージ情報を取得
rpm -qi package-name
(表示されればそんなパッケージがある)

- パッケージに属するファイル一覧
rpm -ql package-name

- あるファイルがどのパッケージに属するか表示
rpm -qf /path/to/file

Postgresに外部から接続

mysqlよりちょっと難しかったのでメモ。

環境
- CentOS5
- Postgres 8.1.1

とりあえず初期設定は
postgresユーザーになって、initdbを行う。DB用フォルダは自分で-Dオプションで指定してもいいし、環境変数PGDATAに入れておいてもいいらしい。とりあえずCentOS5で標準でインストールされているPosgtresを使うと、postgresユーザーの.bash_profileにすでに環境変数が登録されているので、そのままにしておいた。

その後はrootユーザーでservice postgresql startなどのコマンドで起動。

とりあえずそのlocalhostからpsqlで接続。psql -U postgres でよい。これで接続できればとりあえずPostgresサーバーは動いている。
ここまでは簡単だった。

次に外部からの接続設定。
今回は、192.168.1.0ネットワークでPostgresサーバーが192.168.10で動いているものとする。
設定箇所は2か所。DB用フォルダの中にpostgresql.confとpg_hba.confがある。(CentOSの場合 /var/lib/pgsql/dataが標準の場所)
postgresql.confがサーバー全体の設定で、pg_hba.confが接続許可設定という感じだと思う。

まず、postgresql.confでlisten_addressの行を変更する。これはどのIPアドレスで接続待ちをするかの設定。接続を許可するIPアドレスとは異なるので注意。一回間違えた。というわけでサーバー側のIPアドレスを指定。デフォルトだとlocalhostとなっているため、192.168.1.10に変更するか、"*"(all)にしてしまう。
listen_address = "*"
というかんじ。
これで192.168.1.10で待ち受けてくれる。

次にportの指定。
デフォルトだとportの行はコメントアウトされているので、それをコメントイン。とりあえずデフォルトの5432にしておく。
port=5432
というかんじ。これでpostgresql.confの設定は終わり。

次にpg_hba.confの設定。これは接続してくるホストの許可リスト。
デフォルトだと、localhostのみが許可されているので、192.168.1.0ネットワーク内から接続許可するようにする。
host all all 192.168.1.0/24 trust
こんな感じの行を一番下に追加する。特定のデータベースやユーザーのみ許可したいときは
host dbname user address/mask trust
のような感じで書けばよい。詳しくはpg_hba.confに書いてある。

これで外部から接続できるはず。
外部pgAdminなどから接続できるようになるはず。

あ、あと注意としてファイアウォール。CentOS5はpostgresをインストールしても5432ポートは自動的には開いてくれない。ファイアーウォール設定でTPC 5432ポートを開けておく必要がある。

Asus P5Q-Eが異常に遅い

Asus P5Q-Eを使ってPCを組み立てた。
とりあえず問題なく動いたのだけれど、とにかく起動が長い。
使っているOSはWindows XP。
以前より早いCPU、早いHDDなのに遅い。

最初に思いついた原因はドライバのロード時間。前とは構成が全然違うからWindowsがドライバを読み込む時間が長くなっている可能性がある。
しかし、それにしても長い。

いろいろ調べてみると海外サイトとかでも同じようなことが話題になっていて、どうやらIDEデバイスが問題らしい。
とりあえずBIOSにIDE Detectのタイムアウトみたいな設定が35秒とかなっていたのでこれを5秒に変更。
起動してみた。あんまり変わらず・・・。
今度は、Onboardデバイスの設定でIDEをDisableに。
起動してみた。早い!
なんなんだこの違いは。なんだかよくわからん。つないでいるのはDVD-Rドライブ。これに時間がかかるのか・・・。
短くなったのはWindowsのロゴが表示されている時間。これはこれで劇的に短くなった(ただし、DVD-Rドライブは使えず。SATAドライブを購入しろということらしい)
もう一つ遅いと感じているのはその後の「Windowsを起動しています」というダイアログボックスの表示されている時間。ここではスタートアップのドライバやサービスが起動されているはず。ここら辺はソフトウェアの設定でもう少し何とかなるだろうか。不必要サービスはほとんど切ったけど、ドライバもちゃんと調べる必要があるかな。

PHPのリモートデバッグ(ZendDebugger)

まだ環境構築途中だけど、メモ。
環境は
CentOS5 + PHP5.1 + Apache/2.2.3

とりあえずPHPをApacheモジュールとして動かすところまではできるという前提で。

必要なのはPHPのZendDebuggerモジュール
http://downloads.zend.com/pdt/
のserver-debuggerのなかから自分の環境のものを持ってくる。

んで解凍してその中から、PHPバージョンにあったものを取り出す。
それをPHPの拡張モジュールディレクトリにコピー。
僕の場合は/usr/lib/php/modules/ZendDebugger.so
とコピーした。

次にphp.iniの書き換え
[Zend]
zend_extension=/usr/lib/php/modules/ZendDebugger.so
zend_debugger.allow_hosts=192.168.110.1
zend_debugger.expose_remotely=always
のようにした。

注意:僕の環境では allow_hostsには"all"とか"*"とか指定できなかった。コンマ区切りでIPアドレス指定らしいけど、とりあえずひとつしか指定できなかった。

あとはApacheを再起動。phpinfo()を見ればデバッガーのロゴが出ているはず・・・。

その他の環境の設定は
http://www.thierryb.net/pdtwiki/index.php?title=Using_PDT_:_Installation_:_Installing_the_Zend_Debugger

これからEclipseでデバッグをしてみるところ。
それは後ほど

Fedora9の日本語入力

Anthyっていう変換サーバーを使いたいと思ったのだけれど、うまくいかずしばらくほったらかしにして再度チャレンジ。
そもそものLinuxの日本語入力の仕組みとか、調べていたんだけれど
yum groupinstall japanese-support
って一発やれば「システム」→「設定」→「ユーザー向け」→「入力メソッド」から設定できるようになりました。これでいいらしいです。理由は知りません。
feedSubscribe to my feed