Linux Tips at やっぱり、ね。

H.Suzuki <setter (AT) i-red (DOT) info>

戻る

firefox でマウスホイールの加速。 (2012/12/26(Wed) 13:06:27 )

about:config tip.
mousewheel.with_alt.delta_multiplier_y を 100 から 200 に変更すれば、ALT キーを押している時のマウスホイールの移動速度が倍になる。

BSMBLU02 の横スクロール機能 (2012/12/26(Wed) 13:04:08 )

/etc/X11/xorg.conf の
Section "InputDevice" に以下の行を追加する。
Option "XAxisMapping" "6 7"

SKB-SL18 のテンキー機能 (2012/12/26(Wed) 13:02:06 )

まず、~/.xmodmaprc を以下のようにする。
keycode 79 = KP_7
keycode 80 = KP_8
keycode 81 = KP_9
keycode 83 = KP_4
keycode 84 = KP_5
keycode 85 = KP_6
keycode 87 = KP_1
keycode 88 = KP_2
keycode 89 = KP_3
keycode 90 = KP_0
keycode 91 = KP_Decimal

KDE4 で使うには、
~/.kde/Autostart/load_xmodmap
を以下のように。あ、chmod +x しとくように。
#!/bin/sh
/usr/bin/xmodmap ~/.xmodmaprc
で、Fn キーを押しながらで テンキーとして機能する。

gimpでデジタル写真を35mm銀塩ぽくする。 (2010/06/26(Sat) 13:04:30 )

# gimp-2.6.7 での覚書
ノイズの追加
 ・フィルタ->ノイズ->RGBノイズ で、ノイズをRGBに0.05 前後加える。

口径食(レンズ周辺のけられ:vignetting)の追加
 ・レイヤー ->レイヤーを複製
 ・レイヤーダイアログの複製したレイヤーを右クリック -> レイヤーマスクの追加
 ・レイヤーマスクは、完全不透明(白)を選択。
 ・レイヤーダイアログで、できたレイヤーマスクをクリックして選択。
 ・ツールボックスで、描画色を黒、背景色を白にしてから、ブレンドを選択。
 ・ブレンドのオプションは、モード:標準、不透明度:100、グラデーション:描画色から背景色 (RGB)、   オフセット:75前後、形状:放射状、反復:なし、ディザリングあり、スーパーサンプリングなし
 ・画像の中心から、画像の角まで範囲選択すると、レイヤーマスクにブレンドが適用される。
 ・レイヤーダイアログの画像(レイヤーマスクのとなりにある)をクリックして選択。
 ・色->レベル で入力レベルの▲を適当に右側(0.5前後)に動かすと、経口食ができる。
 ・レイヤーダイアログの画像(レイヤーマスクのとなりにある)を右クリックし、レイヤーマスクを適用を実行する。
 ・同、下のレイヤーと統合を実行する。
これで完成。
あとは、白黒にしてみるとか、少しぼかしてみるとか。
白黒変換に関しては、DigiKam が良い。色調とかレンズフィルタや、フィルムの種類まで選べるんだから。単純に白黒にすると、青っぽくなっちゃうんだよねぇ。

linux-2.6.16 ide-cs (2010/04/17(Sat) 09:05:46 )

このカーネルの ide/legacy/ide-cs.c には、こんなパッチが必要な気がする。
--- legacy/ide-cs.c.old 2010-04-17 08:35:14.000000000 +0900
+++ legacy/ide-cs.c 2010-04-17 08:39:10.000000000 +0900
@@ -92,7 +92,7 @@

static void ide_detach(struct pcmcia_device *p_dev);

-
+DECLARE_MUTEX(ide_register_sem);


/*======================================================================
@@ -157,13 +157,17 @@

static int idecs_register(unsigned long io, unsigned long ctl, unsigned long irq, struct pcmcia_device *handle)
{
+ int res;
hw_regs_t hw;
memset(&hw, 0, sizeof(hw));
+ down(&ide_register_sem);
ide_init_hwif_ports(&hw, io, ctl, NULL);
hw.irq = irq;
hw.chipset = ide_pci;
hw.dev = &handle->dev;
- return ide_register_hw_with_fixup(&hw, NULL, ide_undecoded_slave);
+ res = ide_register_hw_with_fixup(&hw, NULL, ide_undecoded_slave);
+ up(&ide_register_sem);
+ return res;
}

/*======================================================================
2.6.27 では何かガードかかかっているようなコードになっているので治っているのかもしれないけど。
2.6.32 では、legacy から出てるし???

PCMCIAスロットに CF を同時に2枚さすことで簡単に DOS 攻撃ができてしまうかもしれない。


むぅ。。。 (2010/02/09(Tue) 18:53:31 )

カーネル空間で、プロセス名から PID を検索するには find_task_by_pid() で、スキャンするしかないのか。

kde gdm shutdown (2010/02/02(Tue) 22:24:41 )

Vine5 で gdm 使ってると、KDE から直接シャットダウンできないようなのだけど... とりあえず、/etc/rc.local に
ln -s /var/run/gdm_socket /tmp/.gdm_socket
などと書いておくと良いらしい。

firefox3.6 (2010/01/24(Sun) 11:41:36 )

java 動かん! 今まで使っていたlibjavaplugin_oji.soは使えなくなり libnpjp2.soというファイルを使う。
$ cd /home/hogehoge/.mozilla/plugin
$ ln -s /usr/java/latest/lib/i386/libnpjp2.so
ということらしい。orz

cifs (2010/01/19(Tue) 10:41:21 )

//192.168.xxx.xxx/Share /mnt/Share cifs rw,guest,iocharset=euc-jp,uid=hoge,gid=hoge,file_mode=0777,dir_mode=0777 0 0 などとしても、uid/gid の通りになってくれない場合。
# echo 0 > /proc/fs/cifs/LinuxExtensionsEnabled
などとしてからマウントする。 man mount.cifs には、これの事を、CIFS Unix extensions と書いてある。わかんねわ。

健忘録 (2009/04/18(Sat) 14:45:21 )

空白を含むファイル名の拡張子を一気に変換する(bash)。 以下の例は: MP3 -> mp3 に変更。
(IFS=$'\n'; for i in `find -depth -name *.MP3`;do mv "$i" `echo $i| sed -e s/MP3/mp3/` ;done)
IFS$=$'\n' がみそ。 bash が認識する区切り文字を改行だけに変更する。 通常は、空白やタブも使われるので、このような処理はうまくいかない。

MacOSX の samba と smbfs (2009/03/11(Wed) 12:01:33)

MacOSX の samba サーバーを mount -t smbfs 云々でマウントすると、 smb_add_request: request [xxxxx, mid=xx] timed out! や、 Connection reset by peer とかいうメッセージが出てファイルが読めないのだが、以下の設定を MacOSX の smb.conf に施してやるとよい(クライアント側で cifs 使えというのは重々承知の上)。 Finder で、アプリケーション->ユーティリティ->コンソールを起動
$ sudo su -
Password: 現在のユーザーパスワード
# cp /etc/smb.conf /etc/smb.conf.org
# cat /etc/smb.conf.org|sed -e s/sendfile\ \=\ yes/sendfile\ \=\ no/ > /etc/smb.conf
# cat /etc/smb.conf|grep sendfile で確認

# killall -HUP smbd;killall -HUP nmbd
要するに、use sendfile = yes を no にする。 samba のデフォルト値も3.0.x で一旦 yes になってから、すぐに no に戻ったので、いわくつきなパラメーターなんじゃないかな。 man ページでも、効果がよくわかんないからデフォルトは no ね。見たいな事かいてあるし。

anthy で顔文字 (2009/02/18(Wed) 21:23:50 )

anthy で顔文字を追加してみた。
オレンジの顔文字辞書ver3.1 ( http://www.facemark.jp/download.htm )「IME2000/98 システム辞書インターネット対応」を持ってきて、展開(lha -x)する。
展開されたディレクトリで以下のスクリプトを実行。

$ nkf -S -e list.txt | tail -n+4 \
| awk '{print $1,"500",$2 "\n" \
"品詞 = 名詞\n"\
"な接続 = n\n"\
"さ接続 = n\n"\
"する接続 = n\n"\
"語幹のみで文節 = n\n"\
"格助詞接続 = n\n"}'\
> kao.src
$ cat kao.src | anthy-dic-tool --append
ちなみに、anthy は、うちのサイトに置いてある、anthy-9100h にあげてあります。

canna の ctd 辞書ファイルも
$ cat /var/lib/canna/dic/canna/kaom.ctd | grep " #"\
| awk '{print $1,"500",$3 "\n" \
"品詞 = 名詞\n"\
"な接続 = n\n"\
"さ接続 = n\n"\
"する接続 = n\n"\
"語幹のみで文節 = n\n"\
"格助詞接続 = n\n"}'\
> kaom.src
$ cat kaom.src | anthy-dic-tool --append
のようにできるな。

覚え書き@IPv6 (2008/11/13(Thu) 12:59:31 ) - (2009/02/04(Wed) 20:53:51 )

pingする。
$ ping6 -I eth0 fe80::201:80ff:fe61:ed23
ssh で接続
$ ssh fe80::201:80ff:fe61:ed23%eth0
DeleGate の起動(IPv4 と、IPv6 両方)
$ delegated -P10080,__:10080 SERVER=...
Firefox3 Proxy設定
 プロキシ fe80::201:80ff:fe61:ed23%eth0
 ポート 10080

「範囲:リンク」となっているアドレスにバインドした ftp サーバ(ftp クライアントから?)には ftpdata 接続ができないらしい。

DeleGate の IPv6 サポートでは、subin が使えなくなっているのね。
delegated -P__:80,80 -vv とかやると、IPv4 では、特権ポートのバインドに subin を使ってくれるけど、IPv6での特権ポートへのバインドは失敗する。そのため、delegated を root で setuid する必要がある。このようなコマンドを root で実行する。
# delegated -Fimp -m
こうすると、delegated は特権操作が可能な root 権限を持つものと、起動ユーザーの権限しかないものといった親子で起動されるようになる。
# ま、subin は obsolete だった気がするので。

Squid & pam (2009/01/31(Sat) 08:32:32 )

初めて、Squid を使ってみた。pam_auth のテストしただけなんだけど。。。
pam_auth を使って pam 経由で UNIX パスワードにアクセスするには、root 権限の sticky ビットが必要なので、 (man 8 pam_auth 参照)
# chmod u+s /usr/lib/squid/pam_auth
する。これは、DeleGate の subin とか、postfix のsaslauthd とかと同じかな。
でも、squid.conf は、わかりにくいな。なれだろうけど。

kdocker (2008/12/19(Fri) 10:51:27 )

最近 Firefox3 の起動に妙に時間がかかるので、高速起動をやってみた。
alltray てのを最初に試したのだけれど、どうも動きが安定しない。
で、kdocker を使ってみる。
$ /usr/lib/qt-3.3.5/bin/qmake
$ make
# make install
したあと、~/.kde/Autostart/kdocker.desktop
を作る。
内容:
$ cat kdocker.desktop
[Desktop Entry]
Comment=
Comment[ja]=
Encoding=UTF-8
Exec=/usr/local/bin/kdocker firefox
GenericName=
GenericName[ja]=
Icon=exec
MimeType=
Name=
Name[ja]=
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
X-DCOP-ServiceType=
X-KDE-SubstituteUID=false
X-KDE-Username=
これで、KDE 起動時に、firefox がドックされるので、高速起動が出来る。

flash player 10 and Vine4.2 (2008/10/16(Thu) 19:39:04 )-(2008/11/03(Mon) 10:44:47 )

さて、flash player 10 がリリースされましたが、もちろん Vine Linux では簡単には使えないでしょう。
そろそろきついかな。。。

さて、Vine Linux 4.2 で
新しい Flash Player 10 ( flashplayer )を動かすには...

##### WARNING WARNING WARNING #####
libc を入れ換えるので、互換性問題がでるかもしれません。
私のところでは問題は表面化していませんが。
##### WARNING WARNING WARNING #####

・VineSeed から、ftp で以下のファイルをとってきます。(バージョンは変化していると思う)
binutils-2.18.50.0.6-1vl5.i386.rpm
binutils-devel-2.18.50.0.6-1vl5.i386.rpm
tzdata-2008b-1vl5.noarch.rpm
glibc-2.8-1vl5.i686.rpm
glibc-common-2.8-1vl5.i386.rpm
glibc-utils-2.8-1vl5.i386.rpm
glibc-devel-2.8-1vl5.i386.rpm
glibc-headers-2.8-1vl5.i386.rpm
libstdc++34-4.1.2-19vl5.i386.rpm
libgcc-4.1.2-19vl5.i386.rpm

・ちょっと邪魔なものを削除。
# apt-get remove build-essential
# apt-get remove gcc
# apt-get remove gcc-cpp
・ライブラリをアップデート
# rpm -Uvh libstdc++34-4.1.2-19vl5.i386.rpm
# rpm -Uvh tzdata-2008b-1vl5.noarch.rpm
# rpm -Uvh glibc* binutils*
・これを先にやるとはまるので注意。
# cp -a /lib/libgcc_s-3.3.6.so.1 /lib/libgcc_s-3.3.6.so.1.bkup
# cp -a /lib/libgcc_s.so.1 /lib/libgcc_s.so.1.bkup
# rpm -Uvh libgcc-4.1.2-19vl5.i386.rpm
・gcc 3.3.6 が必要な人は。
VineSeed Plus からこれをとってくる。
gcc3-3.3.6-0vl9.i386.rpm
gcc3-c++-3.3.6-0vl9.i386.rpm
gcc3-cpp-3.3.6-0vl9.i386.rpm
# rpm -ivh gcc3*
これで、新しい Flash Player が Firefox 3.0.3-1vl4 で動くはず。

ちなみに、本家の Firefox3 を動かすには、上記に加えて、
# apt-get install gtk210*
で、gtk2.10 のライブラリをインストールして、 以下のシェルスクリプトで起動する。
--- contents of start_firefox3 ---
#!/bin/sh
LD_PRELOAD=\
"/usr/gtk210/lib/libgdk-x11-2.0.so.0 \
/usr/gtk210/lib/libgdk_pixbuf-2.0.so.0.1000.14 \
/usr/gtk210/lib/libgdk_pixbuf_xlib-2.0.so.0.1000.14 \
/usr/gtk210/lib/libgtk-x11-2.0.so.0.1000.14 \
/usr/gtk210/lib/librsvg-2.so.2.14.4" \
~/firefox/firefox
--- contents of start_firefox3 ---

glibc のバイナリ互換性。
色々調べたんですが、なんとなくだけど、こんな感じ。
・新しいバージョンの glibc をリンクしたバイナリは、古い glibc の環境では動作しない可能性が大きい。

・古いバージョン glibc をリンクしたバイナリは、多分、新しい glibc の環境では動作する。

・大きく互換性がなくなると、ライブラリのファイル名(soname)が変更になる。

・Vine Linux 4.2 の場合、Linux Threads を採用しているが、Linux Threads / NPTL に関して、カーネルが使える方を判断して使ってくれる?とか、pthread ライブラリは、Linux Threads とバイナリ互換性を持っているとかで、LinuxThreadsに特化した「とても古い作り」になっていなければ動くみたい。
ps -eLf とかやると、同じ PID 下でスレッドが動いているのがわかる。

・あとは、ライブラリバージョンの違いによる、ABI のインターフェース仕様がどの程度変更されたか。
この環境で動かしてみたら、再コンパイルしなくても問題なく動いているように見えるもの。

KDE3, gnome, XFce4, xine, wine, firefox3, firefox2, thunderbird2, kaffeine, kita, digiKam, Audacity, OOo3, GKrellM, cinepaint, eclipse3.2, google earth, vnc, gimp, tux kart, defendguin, mirror magic, xpuyopuyo, vmware player, grip, X DC Roast, Superkaramba, ClamAV, baobab, Dia, Xgl, beryl, Noatun, Adobe Reader, proftpd, sshd

OOo3 が凍る (2008/10/29(Wed) 08:40:54 )

うーむ、こんな解決策があったのか。
http://www.k2.dion.ne.jp/~mistle/linux/application/openOffice.html

# vi /opt/openoffice.org3/program/soffice
で以下の行のコメントを外す(#トル)。
# SAL_NO_XINITTHREADS=true; export SAL_NO_XINITTHREADS
これじゃ使いものにならん!
と思っていたが、良かった。

vinelinux で Xgl + beryl (2008/10/12(Sun) 07:21:39 )

Vine Linux 4.2 で beryl がやっと動いた。

startxgl などに
#!/bin/sh
Xgl :0 -ac -accel xv -accel glx:pbuffer &
DISPLAY=:0 beryl-xgl --use-copy &
DISPLAY=:0 startkde
とか書いておく。

http://shino.pos.to/linux/autox.html
を参考に runlevel 4 を Xgl に割り当てた
で、 kde の AutoStart から、
if [ "`/sbin/runlevel|grep 4`" != "" ];then
sleep 10;beryl-manager
fi
とかしてやる。

単純に起動方法は、
$ ~/startxgl
beryl-xgl の起動オプションの --use-copy を付けないと、真っ白だった。

ちなみに
CPU: P4-2.4G
GPU: ATI Technologies Inc RV350 AP [Radeon 9600] (Secondary)
ati-driver-installer-8.39.4-x86.x86_64

普通に使ってると問題ないけど、重いことやると固まったりするときもある。

Radeon 9600/9200 & Google Earth (2008/09/27(Sat) 00:37:17 )

VineLinux4.2 & Radeon 9600/9200 で、GoogleEarth が使えるドライバはこれでした。
http://www.amd.com/us-en/ 経由でダウンロードできるドライバのバージョン
Radeon 9600 : ati-driver-installer-8.39.4-x86.x86_64.run
Radeon 9200 : ati-driver-installer-8.27.10-x86.run

むむ。

Vista & Vine Dual boot (2008/09/25(Thu) 07:44:35 )-(2008/09/25(Thu) 07:45:16 )

てのをやってみた。Vista になってから面倒くさ。 なにせ、Vista と "同じHDD" 上で、GRUB を使ってデュアルブートすると、あとで問題を起こすらしい。 なので、Windows のブートローダーを使わなきゃならん。 ちょっと初心者には敷居が高くなってしまった。 でもちゃんとした手順でやれば問題ないのだけどね。

まず、Parted Magic(128MB の CFにインストール)を使って、パーティションの切り直しをした。前方にすき間を作るのは危険なので、後方に空きを作った。とりあえず、8GBの余白を確保。再構成に約6時間強(;;)。
参考:http://it-revolution.seesaa.net/article/84641084.html
説明では syslinux.exe を別から持ってきているけど、Parted Magic に含まれていたのでそれを使った。

で、CDROMドライブがないので、USB メモリからのインストールをするための CF を使ったUSBブートドライブを作る。6GB の Micro Drive にブートディスクを作成。
参考:http://d.hatena.ne.jp/funkybass/20070529
説明中の isolinux.cfg は、
ftp.vinelinux.org/pub/Vine/Vine-4.2/i386/isolinux/
から持ってきたので、knoppix は不要。
syslinux は、Parted Magic のを使った。

そして、実際のインストール。
参考:http://www.linuxmania.jp/dualboot2.html
ここがちょっと、厄介。
要点は、
・GRUB を HDD の MBR には、インストールしない!  パーティションの先頭にインストールする。
・インストール後、GRUB のインストール先パーティションの先頭(512バイト)をダンプして、C ドライブにコピーする。  これは、Parted Magic のディスクでブートしてダンプして、Vista 上にコピーできる。
・Vista の ブートマネージャを使うための設定をする。
うー、めんどくさ。
ま、そのうち使う羽目になるだろうから、あとでちゃんとまとめます。

via_velocity でカーネルパニック (2008/08/30(Sat) 10:41:48 )-(2008/09/02(Tue) 14:30:55 )

via_velocity でジャンボフレーム(MTU=9000)を使おうとしたら、カーネルパニックした。
/etc/sysconfig/network-scripts/ifcfg-eth0
に書くとだめらしい。ダメなんだから諦めりゃーいいのに、悪あがき。
結局、rc.local で、
/sbin/ifconfig eth0 mtu 9000
を実行することで使えるみたい。
何故?負荷かけても大丈夫みたいだし、ちょっと、追っかけるパワー無し。

ついでに、以下の設定のようにした。

rc.local
/sbin/ifconfig eth0 mtu 9000
# /sbin/route del default
# /sbin/ip route add default via 192.168.0.1 mtu 1500
/sbin/ip route change default via 192.168.0.1 mtu 1500
/etc/sysctl.conf
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 873800 1747600
net.ipv4.tcp_wmem = 4096 873800 1747600
net.ipv4.tcp_mem = 2048000 2048000 2048000
net.core.rmem_default = 873800
net.core.wmem_default = 873800
net.core.rmem_max = 1747600
net.core.wmem_max = 1747600
net.core.optmem_max = 20480

SDL キーリピート (2008/01/26(Sat) 08:16:10 )-(2008/08/21(Thu) 17:30:34 )

SDL の疑似キーリピート機能には、問題がある様子。
特定の条件下で、キーリピートしっぱなしになってしまう。
・なんらかのきっかけで、キーの Break(SDL_RELEASED) がこないのか...そうともいえない動きをしているようにも見える。うーむ。。。 もちょっと、調べてみよう。
・なるほど、tty(Medium-raw mode)から read() したときに、バッファに複数のキーが溜るようなケースで、キーのリリースが来ないことがあるのか....カーネルのバグかなぁ...
・しかたないので、SDL ビデオ初期化ルーチンで KDKBDREP ioctl を使って、キーのリピートレートを問題無いくらいに遅くした。これでも、キーが非常に短い間に press->release されると再現するなぁ...困った...
・そういえば、これは、1度に2文字以上きた場合、全て Release として扱うことで解消しました。
・うーむ、そりゃそうなんだが、モディファイアキーもですか。
・処置無しです。SDL のキールーチンを RAW モードで全部書き換えるかなぁ。
・結局、コンソールの read() で、BUFSIZ まで一気に読んでいたのを、1バイトづつに変更したら直ったみたい(謎)。

ダイナミック DNS (2008/08/12(Tue) 19:09:51 )-(2008/08/09(Sat) 09:14:33 )

プロバイダがが無くなってしまう。しかし、執行猶予が2ヶ月とは...
ま、それはいいが、固定IP が使えなくなるのは困る。
しかたないので、DDNS の準備。
とりあえず、以下のスクリプトを cron で動かすことに。
---
#!/bin/sh
# Setting for eNom(VALUEDOMAIN.COM)
NEWIP=`/usr/bin/curl http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip 2>/dev/null`
LEN=$(expr length "$NEWIP")

while [ ${LEN} -gt 15 ]; do
NEWIP=`/usr/bin/curl http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip 2>/dev/null`
LEN=$(expr length "$NEWIP")
sleep 5
done
if [ ${LEN} -lt 7 ]; then
exit;
fi
OLDIP=`cat /home/user/oldip`
URL="http://dyn.value-domain.com/cgi-bin/dyn.fcg?p=PASSWD&;d=example.jp&i=$NEWIP&h"
WGET="/usr/bin/curl"
if [ "$NEWIP" != "$OLDIP" ]; then
/usr/bin/logger "Set DDNS example.jp $OLDIP to $NEWIP"
$WGET "$URL=@"
$WGET "$URL=site1"
$WGET "$URL=site2"
echo "$NEWIP" > /home/user/oldip
echo "DNS Updated: example.jp $OLDIP to $NEWIP" \
| mail -s "site:DNS Updated" \
user@example.jp,user2@example.net
fi

むむ、ここの DDNS、ttl が 1h だ。
長い...

dyn.value-domain.com/cgi-bin/dyn.fcg?ip
のサービスが、結構ダウンしているみたい。
結果の[1-9|\.]を取り除いた長さが 0 かどうかのチェックを入れる必要があるな。
とりあえず、ADSLモデムの設定を見る方に変えたけど。

おぉ、cgi から登録すると TTL=92s になるのか。
web から登録すると TTL=3600s になるのか。
知らんかった。
cgi から登録する前に、登録したいレコードを全部削除しておかないと、ダメだけど。

signal ? (2008/08/08(Fri) 06:03:24 )

どうも、でばどら内で、kill_proc() を呼んでいるところ、-EPERM でエラーが返ることがあるな。
kill_proc_info_as_uid() にしてみたのだけど、いいのか?


glibc detected (2008/05/22(Thu) 16:13:04 )

*** glibc detected *** free(): invalid next size (fast): 0xXXXXXXXX ***
バッファオーバーフローか...そうか。

注)バッファオーバーフローでもそういうことになるということ。

tracef (hogetrace) (2008/05/09(Fri) 13:49:38 )

tracef を使ってみたいのだけど、
./configure / make が通らない。
とりあえず、
# apt-get install boost*
# apt-get install libelf-devel
# ln -s \
/usr/lib/libboost_program_options-gcc33.so \
/usr/lib/libboost_program_options.so
してから、何箇所か変更。
TLS_ (__thread) で宣言されていると、SEGV してしまう。
g++ よくわからん。
なんとなく動いたので、
i-red.info/docs/rpm/stray_rpms/tracef/
に置いてみた。
$ configue;make; # cp src/tracef /usr/bin
$ tracef --plt --line-numbers --call-tree PROG
とか。

注) gcc(g++)) が 4.x 以降じゃないと使えないらしい。

signal (2008/04/04(Fri) 09:14:58 )

意外と書いてないので...FAQ?
sigqueue() でシグナルを送信したときに妙な動き、
# SIGUSR1 シグナルが1つしか保留されないといったもの。
ちょっと、調べてみたので、参考まで。
まず、これに関して、この動きは正しい。というか、仕様。
なぜなら、この、SIGUSR1 というのは、"POSIX signal" であるということ。
POSIX signal は、1つのプロセスが signalハンドラにいて、シグナルをブロックしている場合、同じシグナルは、1つだけが保留されるということになっているらしい。
------------------------------------------------------------------------------------
では、どうすれば...
POSIX realtime signal を使う。
POSIX realtime signal は、シグナルをプロセスのシグナルキュー?にため込むので、そのような制限は無くなっている。
注) Linux の場合、制限はある。OS レベルで数が制限されている... で、どの様に使うのか。
簡単。
単に、シグナル番号に、SIGRTMIN 以上、SIGRTMAX 未満の番号を使うだけ。
ただ、SIGRTMIN (多分 32) は、システム依存なうえに、
bits/signum.h 内で、関数(__libc_current_sigrtmin ())
を指すマクロとして定義されているので、switch 文 の case で使えない?

この件に関しては、多分、経過措置であろう マクロ __SIGRTMIN を使うことで回避できる。
たとえば、
#define SIG_NANDAKANA (__SIGRTMIN + 5)
や、
#define SIG_HOGEHOGE (__SIGRTMAX - 5)
補足:
RealTime シグナルを使っていて Catch していないのがあると、1982 回で EAGAIN になりシグナルが機能しなくなる。
制限は、RLIMIT_SIGPENDING に定義されている。

kaffeine (2008/03/23(Sun) 11:15:45 )

kaffeine-0.8.6 の configure が、どうも xine-lib を見付けてくれないので、configure を書き換えてしもうた。
xine-lib の検出部分を全てコメントアウトして、
CFLAGS_XINE=""
LIB_XINE=""

CFLAGS_XINE="-I/usr/include/xine"
LIB_XINE="-lxine"
に変更して残した。
もうちょっと勉強。

CF-PCMCIA (2008/01/22(Tue) 21:44:56 )

PCMCIA で CF を使うとものすごく遅い。
CF の True-IDE モードは、16ビット-PCMCIA でしか動かないらしいのだが、1.2MB/s が限界ってのは。。。
CF-CARDBUS コンバータを使えば多少マシらしいが、USB の方がはるかに早い。困ったものだ。

cp / mv(rename) (2007/11/30(Fri) 07:10:56 )

システム関連のファイルを書き換えるときは、cp を使うことは出来ない。ということに最近気がつく(^^;。
なので、mv / raname() を使いませう。
cp
だと、ファイルが不完全な状態が長すぎるということで、特にライブラリファイルなどについては、それを使っているアプリケーションが "Z" してしまう。
mv/rename でやる場合も、同じファイルシステム内にあるファイルじゃないと、ダメなんではないかな。
busybox の tar コマンドは、ファイルをコピーしているのだろうか。
gnu の tar コマンドは大丈夫みたい。追っかける気無し(^^;;;

fileno (2007/10/23(Tue) 07:43:50 )

fileno(NULL) って、SIGSEGV になっちゃうのね。
man ページ見ると、
However, in case fileno() detects that its argument is not a valid stream, it must return -1 and set errno to EBADF.
なんて、書いてあるのにね。

fancontrol (2007/10/23(Tue) 07:43:19 )

lm-sensors + fancontrol を使って、ファンを制御してみる。
# /usr/sbin/pwmconfig
で設定ファイルを作るのだが、よくわからない所も多いので、以下のテンプレートを使って設定してみる(動かないときは、素直に pwmconfig を使いましょう)。
# どの温度計がどのファンに対応してて、どの PWM で制御するのかは、pwmconfig の出力(とりあえず、全部[Enter] で応答)を眺めていると見えてくるかも。

--- /etc/fancontrol の中身(コメントは使わない) ---
# モニター間隔(秒)
INTERVAL=10

# どの 温度計が、どの PWM(ファンの速度)と対応しているのか。
FCTEMPS=hwmon0/device/pwm1=hwmon0/device/temp2_input hwmon0/device/pwm3=hwmon0/device/temp1_input

# どの PWM でどのファンを制御するのか
FCFANS=hwmon0/device/pwm1=hwmon1/device/fan1_input hwmon0/device/pwm3=hwmon1/device/fan3_input

# ファンを停止する温度
MINTEMP=hwmon0/device/pwm1=40 hwmon0/device/pwm3=40

# ファンを目一杯回す温度
MAXTEMP=hwmon0/device/pwm1=60 hwmon0/device/pwm3=60

# 開始ファン速度 PWM 値(0-255)
MINSTART=hwmon0/device/pwm1=150 hwmon0/device/pwm3=150

# ファンが停止する PWM 値(0-255)
MINSTOP=hwmon0/device/pwm1=0 hwmon0/device/pwm3=0
--------------------------
なお、複数のファンを制御するときは上記のように、
パラメータ名=設定 設定
のように、空白で区切って続ける。

rc.local とかで、
/usr/sbin/fancontrol &> /var/log/fancontrol.log &
のように起動。
BIOS より、こっちの方が、きめ細かく制御できていいね。
ちなみに、/usr/sbin/fancontrol は、スクリプトです。

備忘録 (initrd)(2007/09/01(Sat) 15:27:46 )

initrd.img を直接いじる方法
まずは、展開。
# cd /boot
# mkdir wk
# cd wk
# zcat ../initrd.img | cpio -idmv
でてきた中身を調整とか。
# find | cpio -H newc -o | gzip -9 > ../initrd.img
で、lilo 。

ちなみに、VMWare を使うのに、initrd.img に対して
以下のような変更を行った。
展開してできた、lib ディレクトリに
/lib/modules/.../scsi/scsi_mod.ko
/lib/modules/.../scsi/sd_mod.ko
/lib/modules/.../scsi/BusLogic.ko
をコピーし、
init の mkdevices 行より前に、
insmod /lib/scsi_mod.ko
insmod /lib/sd_mod.ko
insmod /lib/BusLogic.ko
sleep 10
を追加。
これで、usb 接続の 物理デバイスからのブートができた。

むむむ。 (2007/08/29(Wed) 07:54:30 )-(2007/08/31(Fri) 07:20:43 )

GeodeLX の コンパニオン、CS5536 の UART2 を 16550 コンパチで使おうとしているのだけど、カーネルでこのポートの rx (GPIO3) を出力に書き換えている部分が "どこかに" あるみたいだ。
起動してから、設定し直しても良いんだけど、それまで、出力がぶつかっちゃうしなぁ... 見つからないなぁ...(;;)

なんか、DDC-SCL 関連のようなのだけど、start_kernel より前みたい (;;)。
setup.S とかなのかなぁ?

arch/i386/boot/video.S : line 1948 あたりに、それらしきものを見付けた。
int10 BIOS call なのね。
キーワードは "VBE" です。

linux-2.6.x boot logo (2007/05/31(Thu) 14:53:50 )

linux-2.6.x で、フレームバッファの起動ロゴ変更する方法。
linux-2.4.x の時は、カーネルのソースに、サイズが直書きしてあったり、
drivers/video/fbcon.c の以下の部分
#define LOGO_H 80
#define LOGO_W 80
その画像自体がヘッダファイル(linux_logo.h)で、 それをを作る gimp のユーティリティ
GLOGO 1.3: A gimp plug-in to create the linux-logo includefile
でもサイズ固定で直接書き直す必要があった。
glogo.c の以下の部分
#define WIDTH 80 #define HEIGHT 80
および、glogo_simple.scm の以下の部分。
(gimp-image-scale img2 80 80) (gimp-image-scale img16 80 80) (gimp-image-scale img224 80 80)

linux-2.6.x のばあい、サイズはとりあえず気にしなくとも良いので、 だいぶ楽になりました。

・基本的には、好きな png ファイルを作る。
・以下のコマンドで ppm に変換する。
$ pngtopnm logo.png | pnmtoplainpnm > logo_linux_clut224.ppm
・そして、カーネルソースツリーのそれと置き換える。
$ cp logo_linux_clut224.ppm /usr/src/linux/drivers/video/logo/

・カーネルのコンパイル時に色が足りないなどといわれた場合
$ pngtopnm logo.png | ppmquant -fs 223 | pnmtoplainpnm > logo_linux_clut224.ppm
  で、色数を減らす。

Vine-Linux4.1 での kernel-2.6.16-0vlxx.src.rpm の SPEC ファイルでは、 以下のように差し替えているので、
...
# fb boot logo
Source100: logo_vine_clut224.ppm
...
cp -f %{SOURCE100} drivers/video/logo/logo_linux_clut224.ppm
...
rpm/SOURCES の logo_vine_clut224.ppm を新しいものに置換え、 rpmbuild する。

Konqueror の文字化け (2007/07/13(Fri) 13:33:54 )

Konqueror から、
smb://user@server/Share
の様に開けるのが便利なのだけど、 日本語が化けてしまっていたのであきらめて、 fstab に書いてマウントしまっていた。
が、
~/.smb/smb.conf というファイルとディレクトリを作って、中身を以下のようにすれば良いそうだ。
[global]
dos charset = CP932

pdftotext (2007/01/16(Tue) 21:40:22 )-(2007/01/18(Thu) 17:00:20 )

ひさびさに使ってみたら、Acrobat7 のドキュメントは変換できないみたい...どうやって、freyasx の index 作ろう。。。
強引に変更。
--- pdftotext.cc~ 2005-08-17 14:34:31.000000000 +0900
+++ pdftotext.cc 2007-01-17 09:44:47.000000000 +0900
@@ -161,12 +161,14 @@
}

// check for copy permission
+#if 0
if (!doc->okToCopy()) {
error(-1, "Copying of text from this document is not allowed.");
exitCode = 3;
goto err2;
}
-
+#endif
+
// construct text file name
if (argc == 3) {
textFileName = new GString(argv[2]);

はじめてみたかも(oom-killer) (2007/01/10(Wed) 18:37:15 )-(2007/01/11(Thu) 20:23:24 )

oom-killer が動くのを見てしまった。
見たくないけど...

以下、雑談。

要するに問題は、

1. linux カーネルでは malloc が成功した場合、その領域が必ずしも全部使えるとは限らない。というか、"確保しても全部使わないでしょ" みたいなノリがあるようだ。

2. この実装を補填するかたちで、OOM-Killer が実装されているかな?で、malloc でメモリ不足が発生した場合、適当な(かどうかはわからないけど)プロセスを殺してメモリを確保しようとする。これにより、カーネル自体が死んでしまうことを避けようとしている。殺すプロセスは、もっとも最近起動したとか、メモリをいっぱい使っているとかが選択基準。

であり、解決策として考えられるのは、

1. OOM-killer の対象からプロセスを除外する。
 # echo -17 > /proc/〈プロセスID〉/oom_adj
  -> 代わりに犠牲になるプロセスが出る。

2. malloc で楽観的なメモリ確保(over commit)をしないようにする。
 # echo 99 > /proc/sys/vm/overcommit_ratio
 # echo 2 > /proc/sys/vm/overcommit_memory
   -> これでダメな場合、元々メモリ不足?

3. 常に、いくらかのメモリを空けておくようにする。
 # echo キロバイト > /proc/sys/vm/min_free_kbytes
   キロバイトのデフォルト値はメモリの容量によって決まる
 -> 忙しくなったときに確保が間に合うかは不明。

以下根拠無し。

・てきとうな容量のRAMディスクを確保して、そこを swap 領域として使うなどすると、瞬間的なメモリ不足は回避できるかもしれない。

もしこれで駄目なら、malloc(もしくは変数宣言) を初期化段階で行ってしまい、動的に確保するのをやめる。

とか?

fbcon でカーソルを絶対に表示したくない ( 2006/12/14(Thu) 17:36:13  )

備忘録:fbcon でカーソルを絶対に表示したくない
linux/drivers/video/fbcon.c の
fbcon_cursor() で、
いきなり return;
かな。