xfce4-session: Another session manager is already runningこれは, VNC サーバを起動するときに, 端末の XFCE セッションが設定した環境変数が, VNC 中の XFCE セッションに伝わってしまって, 既にセッションが起動済みであると判断してしまっているためだろう. こんなときには一度ローカルマシンに SSH などでログインして, その中で VNC サーバを起動すればよい.
$ ssh localhost vncserver
xfce4-session: Another session manager is already runningこれは, VNC サーバを起動するときに, 端末の XFCE セッションが設定した環境変数が, VNC 中の XFCE セッションに伝わってしまって, 既にセッションが起動済みであると判断してしまっているためだろう. こんなときには一度ローカルマシンに SSH などでログインして, その中で VNC サーバを起動すればよい.
$ ssh localhost vncserver
*.so
) は,
プログラムの実行時に ld.so
によって自動的にリンクされるオブジェクトです.
しかし, SELinux を使用していると,
error while loading shared libraries: *.so: cannot restore segment prot after reloc: Permission deniedといったエラーが出ることがあります. 例えば, Firefox などのようにバイナリをダウンロードし展開して使用すると, このようなエラーに遭遇することがあるでしょう. このときには,
chcon
を使用して,
問題の共有ライブラリのセキュリティコンテキストの種類を textrel_shlib_t
に変更しましょう.
chcon -t textrel_shlib_t *.soもし, 共有ライブラリがたくさんあるのであれば,
find
を使用して,
find -name '*.so*' | xargs echo chcon -t textrel_shlib_tとすると, サブディレクトリにある共有ライブラリのセキュリティコンテキストも変えることができます.
rm
で削除したファイルを復元する機能が提供されていません.
そこで, rm
をゴミ箱に移動するコマンドに置き換える方法を紹介します.
ここで紹介する機能は,
function rms { # safe rm local rm_opt='-v -i' local mv_opt='' OPTIND=0 while getopts firv flag; do case $flag in f) mv_opt="$mv_opt -f";; i) mv_opt="$mv_opt -i";; r) rm_opt="$rm_opt -r";; v) mv_opt="$mv_opt -v";; *) OPT_ERROR=1; break;; esac done if [[ $OPT_ERROR ]]; then echo "usage: $0 -firv files..." >&2 exit $OPT_ERROR fi shift $((OPTIND-1)) local trashes=( ~/.trash /tmp/trash-$USER ) mkdir "$trashes" &>/dev/null local i t local date=$(date +'%Y%m%d-%H%M%S') for i in "$@"; do local found='' for t in ${trashes[@]}; do if test "$(stat -c '%D' "$i")" = "$(stat -c '%D' "$t")"; then local tt=$t/$date/ mkdir $tt &>/dev/null mv $mv_opt "$i" $tt && local found=1 fi test -n "$found" && break done test -z "$found" && /bin/rm $rm_opt "$i" done } alias rm=rms
mand
を追加しなければならない.
アドバイザリロックでは, ファイルが「ロック」されていても,
他のプロセスが読み書きなどのアクセスを行うことができる.
機構 | 種類 | 範囲 | 所有者 |
---|---|---|---|
fcntl | 排他, 共有 | バイト単位で範囲指定 | プロセス |
flock | 排他, 共有 | ファイル単位 | ファイルディスクリプタ |
lockf | 排他のみ | バイト単位で範囲指定 |
flock
では,
ファイルディスクリプタがロックを所有し,
複製 (fork
, dup
などで作成されるもの) は同じロックを参照する.
複製したファイルディスクリプタのうちいずれかに対して明示的にアンロック操作をした場合か,
ロックを参照する全てのファイルディスクリプタが閉じられたときにロックが開放される.
ひとつのプロセスが同じファイルに対する複数のファイルディスクリプタを取得した場合には,
それぞれに対して独立したロックが生成される.
Linux では, lockf
は fcntl
へのインターフェイスとして実装されている.
fcntl
では,
プロセスがロックを所有し,
fork
で作成された子プロセスには継承されないが,
execve
の前後ではロックが保存される.
ひとつのプロセスが同じファイルに対して複数のファイルディスクリプタを取得している場合には,
ロックは共通している.
ロックが適用されているファイルを参照しているファイルディスクリプタのいずれかが閉じられたとき,
ロックが開放される.
すなわち, 例えば /etc/passwd
のロックを所有しているときに,
あるライブラリ関数がそのファイルを open, close すると,
そのファイルへのロックが開放される.
smbd/notify_inotify.c:421(inotify_watch) inotify_add_watch returned Permission deniedといったログが出力され, Windows からディレクトリ内のファイル一覧を取得できないことがある. このとき, SELinux がファイルへのアクセスを妨げている可能性がある. SELinux のマニュアルはいくつかあるが,
samba_selinux(8)
に
samba を使用する際の操作方法などが例を交えてかかれている.
これにしたがって,
sudo setsebool -P samba_enable_home_dirs 1と命令すると, Windows からホームディレクトリを読み出せるようになるだろう.
Linux 上の X では, マウスカーソルが上にあるウィンドウをフォーカスし, 全面に移す機能がある. タスクリストから目的のウィンドウを選択したりタイトルバーをクリックしなくても, 別のウィンドウを選択できるので, 便利なことがある.
Windows でも同様の機能がないかと探して見たところ, よく似た機能が備わっていることが分かった. このページ Activate a window by hovering over it with the mouse にかかれていた.
これによると, マウスカーソルが上にくると (1秒くらい経ってから), ウィンドウがアクティブになる. すなわち, ウィンドウにフォーカスが移り, 全面に表示される.
X と違い Windows では, フォーカスが移ると同時に全面に表示される.
X では, マウス移動からウィンドウがフォーカス取得までの時間を短くし, フォーカス取得から全面に移動するまでの時間を長くしておくことで, マウスを文献からエディタへ移動してすぐプログラムをタイプし始めるといった使い方ができた. しかし, Windows で同じように操作すると. アクティブになる前に 最初の数文字をタイプして思い通りの動作をしなかった.
X と Windows とで動作がやや異なるが, それでもこの機能は便利であると思う.