Synergyクイック設定法

Synergyを使おうと思ったのだけれど、設定方法を忘れてしまい、かなり手間がかかってしまった。
過去にも同じことが何度かあったので、設定法をまとめておく。

環境

  • Arch Linux(x86_64, 3.14.2-1-ARCH)
  • synergy (1.4.17-1)
  • avahi (0.6.31-11)
  • nss-mdns (0.10-5)

必要なもの

設定手順

設定は、次の手順でおこなう。
また、特に明記しない限り、作業は、ホスト・クライアントの両方でおこなう。

  1. avahiデーモンの起動
  2. nsswitch.conf の書換え
  3. synergy.conf の書換え (ホスト側)
  4. synergyサーバの起動 (ホスト側)
  5. synergyクライアントの起動 (クライアント側)

設定

avahiデーモンの起動

avahiデーモンを起動する。


# systemctl enable avahi-daemon.service
# !:s/enable/start

nsswitch.conf の書換え

まず、/etc/nsswitch.conf のバックアップを作成する。


# cp /etc/nsswitch.conf /etc/nsswitch.conf.bak
次に、/etc/nsswitch.conf を以下のように書換える。

$ diff nsswitch.conf nsswitch.conf.bak
9c9< hosts: files myhostname mdns_minimal [NOTFOUND=return] dns

    • -

> hosts: files dns myhostname

synergy.conf の書換え

ホスト側で設定をおこなう。

まず、/etc/synergy.conf.example をコピーし、/etc/synergy.conf を作成する。

# cp /etc/synergy.conf.example /etc/synergy.conf

次に、/etc/synergy.conf を以下のように書換える。


$ diff /etc/synergy.conf /etc/synergy.conf.example
7,8c7,10< host:< client:

    • -

> # three hosts named: moe, larry, and curly
> moe:
> larry:
> curly:
12,13c14,17< host:< down = client

    • -

> # larry is to the right of moe and curly is above moe
> moe:
> right = larry
> up = curly
15,16c19,30< client:< up = host

    • -

> # moe is to the left of larry and curly is above larry.
> # note that curly is above both moe and larry and moe
> # and larry have a symmetric connection (they're in
> # opposite directions of each other).
> larry:
> left = moe
> up = curly
>
> # larry is below curly. if you move up from moe and then
> # down, you'll end up on larry.
> curly:
> down = larry
19,22c33,37< #section: aliases< # client:< # snowleopard< #end

    • -

> section: aliases
> # curly is also known as shemp
> curly:
> shemp
> end

synergyサーバの起動

ホスト側で synergys を実行する。


$ synergys -f

synergyクライアントの起動

クライアント側で synergyc を実行する。


$ synergyc -f host.local

復旧方法

まず、/etc/nsswitch.conf をバックアップファイルから復旧する。

# mv /etc/nsswitch.conf /etc/nsswitch.conf.old && mv /etc/nsswitch.conf.bak /etc/nsswitch.conf
次に、avahiデーモンを停止する。

# systemctl disable avahi-daemon.service
# !:s/disable/stop
最後に、ホスト側で作成した /etc/synergy.conf を削除する。
# rm /etc/synergy.conf

雑記

  • 細かい設定は後で考える

tmux使用時にmanページを新規ウィンドウ表示 & manページをカラー表示にする設定法のまとめ

tmux使用時、通常、manページは man コマンドを実行したウィンドウに表示される。この状態では、manページを参照しながらコマンドを実行したい場合、不便である。

その解決策として、tmux使用時に、manページを新規ウィンドウで表示する方法をまとめる。
また、manページをカラー表示にし、読みやすくする方法もまとめる。

環境

  • zsh (5.0.5)
  • tmux (1.9a)
  • lv (4.51)
  • less (458)
  • most (5.0.0)
  • evilvte (0.5.2~pre1)

設定手順

設定は、以下の2つの手順に分けておこなう。

  • 新規ウィンドウ表示の設定
  • manページカラー表示の設定

上記2つの手順は、それぞれ独立しているため、どちらか1つの設定だけをおこなうことも可能。




新規ウィンドウ表示の設定

manページをtmux内の新規ウィンドウで表示するために、シェル関数を追加する。

設定手順
$HOME/.zshrc に、以下の関数を追加する。(スクリプト引用&改変元)


function man_tmux() {
if [ $# -le 1 ];
tmux new-window -n "man $@" "exec man $@"
else
man $@
fi
}
alias man=man_tmux

以下、コピペ用ワンライナー


$ echo -e 'function man_tmux() {\n\tif [ $# -le 1 ];\n\t\ttmux new-window -n "man $@" "exec man $@"\n\telse\n\t\tman $@\n\tfi\n}\nalias man=man_tmux' | sed -e 's/\t/ /g' >> ~/.zshrc

補足

上記関数の"new-window"を"split-window"にした場合、新規ウィンドウではなく分割ペインとしてmanページが表示される。





manページカラー表示の設定

manページをカラー表示にするには、大きく分けて次の2種類の方法がある。

  • ページャでカラー表示できるように設定する
  • ターミナルでカラー表示できるように設定する

ここでは、ページャはlv、less、mostの3つを、
ターミナルはevilvteを、合計4通りの設定方法を述べる。

lvでカラー表示 (上記4種類の中で、一番おすすめの方法)

設定手順
$HOME/.zshenv に、以下の内容を追加する。


MANPAGER="lv"
LV="-c -Sh1;36 -Su1;4;32 -Ss7;37;1;33"

以下、コピペ用ワンライナー


$ echo -e 'MANPAGER="lv"\nLV="-c -Sh1;36 -Su1;4;32 -Ss7;37;1;33"' >> ~/.zshenv

カラーコードは、こちらを参考に。
注意点として、lvのオプションでは、ANSIカラーコードとして正確に記述する必要はない。
数値とセミコロン';'だけで指定できる。


"tmux new-window"実行時には $HOME/.zshrc は読込まれないため、上記設定は $HOME/.zshenv に書かなければならない。
(以下、上記の問題の詳細が書いてあるサイト)



この方法の欠点

  • (考えつく限りでは)無し
lessでカラー表示

環境変数"LESS_TERMCAP"を用いて設定をおこなう。

設定手順
1. $HOME/.zshenv に、以下の内容を追加する。


MANPAGER="less"
LESS_TERMCAP_mb=$'\E[01;31m' # begin blinking
LESS_TERMCAP_md=$'\E[01;38;5;74m' # begin bold
LESS_TERMCAP_me=$'\E[0m' # end mode
LESS_TERMCAP_so=$'\E[38;5;246m' # begin standout-mode - info box
LESS_TERMCAP_se=$'\E[0m' # end standout-mode
LESS_TERMCAP_us=$'\E[04;38;5;146m' # begin underline
LESS_TERMCAP_ue=$'\E[0m' # end underline

2. 任意のANSIカラーコードを指定する。

この方法の欠点

  • マルチバイト文字を表示する際、表示がおかしくなることがある
  • マルチバイト文字の検索ができない
mostでカラー表示

mostは標準でmanページをカラー表示するため、インストールとmanページャの指定をするだけで良い。

設定手順

  1. mostをインストール
  2. .zshenv に'MANPAGER="most"'を追加する

この方法の欠点

> less風のキーバインドに設定することは可能(参考: ArchWiki - man page)

ターミナル(evilvte)でカラー表示

evilvteの特定のテキストを色付けするオプションを有効にする。

設定手順
1. config.h を編集する。


// #define COLOR_TEXT_BOLD "red"
// #define COLOR_TEXT_DIM "#FFFF00"
// #define COLOR_TEXT_HIGHLIGHTED "green"
の3行をコメントアウトし、それぞれ任意の色を指定する。

2. make install する。

この方法の欠点

  • manページ以外の表示にも、上記の色設定が適用されてしまう





参考サイト

  1. tmux内でコマンドを実行する際に新しいウィンドウやウィンドウを分割して実行する - うどん駆動開発
    http://blog.repl.info/blog/2011/12/03/ssh-with-tmux-and-zsh/
  2. LV Homepage (in Japanese)
    http://www.mt.cs.keio.ac.jp/person/narita/lv/index_ja.html
  3. tmux new-windowで環境変数が読み込まれない件 | Proxima Fermata
    http://blog.larus.jp/?p=583
  4. zsh: 5. Files
    http://zsh.sourceforge.net/Doc/Release/Files.html#Startup_002fShutdown-Files
  5. zshの設定ファイルの読み込み順番のメモ - 目の前には僕らの道がある
    http://masasuzu.hatenablog.jp/entry/20120506/1336286016
  6. man page - ArchWiki
    https://wiki.archlinux.org/index.php/man_page#Colored_man_pages

雑感

  • tmuxの新規ウィンドウ(or 分割ペイン)で実行は、manページだけではなく、色々と応用できそう。
  • > 参考サイト1. には、sshの例も書いてある。
  • less、mostはそれぞれ固有の欠点があるため、日本語環境ではlvが最も適していると思う。

また、ターミナル側でカラー表示にする方法も固有の問題があるため、manページャ側でカラー表示にする方が良さそう。

  • 仮想コンソール上だと、上記の設定を書かなくても、初めからmanページがカラー表示になっている理由がよく分からない。
  • > 元からカラーコードを解釈するようになっているとか??

ALSA使用時のデフォルトサウンドカード設定法のまとめ(&同時再生問題の解決法)

ALSA使用時に、使用したいサウンドカードがデフォルトに設定されておらず、音声の再生や、alsamixierでのコントロールができないことがある。
この問題の解決法として、サウンドカードの読込み順を変更する方法をまとめる。


また、(設定ファイルの記述ミスで)同時再生ができなくなる問題が発生したため、その対策法もまとめる。

環境

  • ソフトウェア
    • Arch_Linux (x86_64, Kernel 3.14-1-1-ARCH)
    • ALSA (k3.14.1-1-ARCH)

解決法

/etc/modprobe.d/alsa-base.conf に、サウンドモジュールの読込み順を指定する設定を書込む。
また、同時再生問題を解決するために、$HOME/.asoundrc にソフトウェアミキシングを有効にする設定を書込む。

設定手順

設定は、以下の手順でおこなう。

  • 読込み順の設定

1. サウンドモジュール一覧と読込み順の確認
2. 設定の記述
3. 再起動

  • 同時再生問題の対策

1. 設定の記述
2. 再起動

読込み順の設定

ArchWikiのALSAのページの、Set the default sound cardを参考にして設定をおこなう。

まず、現在読込まれているサウンドモジュールの一覧と、モジュールの読込み順を確認する。


$ cat /proc/asound/modules
0 snd_hda_intel
1 snd_usb_audio

次に、/etc/modprobe.d/alsa-base.conf を編集し、以下の内容を追記する。
( /etc/modprobe.d/alsa-base.conf が存在しない場合は、新規に作成する)


# vim /etc/modprobe.d/alsa-base.conf
(中略)
$ cat /etc/modprobe.d/alsa-base.conf
options snd slots=snd_usb_audio,snd_hda_intel #snd_slots=以降に、'$ cat /proc/asound/modules'で表示されたモジュールを全て書く
options snd_usb_audio index=0 #一番目に読込むモジュールを書く
options snd_hda_intel index=1 #二番目に読込むモジュールを書く


最後に、再起動する。

同時再生問題の対策

ArchWikiのALSAのページの、Simultaneous_playback_problemsを参考にして設定をおこなう。

$HOME/.asoundrc に、以下の内容を追記し、ソフトウェアミキシングを有効にする。(.asoundrc が存在しない場合は、新規に作成する)


$ vim $HOME/.asoundrc
pcm.dmixer {
type dmix
ipc_key 1024
ipc_key_add_uid 0
ipc_perm 0660
}
pcm.dsp {
type plug
slave.pcm "dmix"
}

以下、コピペ用ワンライナー


$ echo -e 'pcm.dmixer {\n\ttype dmix\n\tipc_key 1024\n\tipc_key_add_uid 0\n\tipc_perm 0660\n}\npcm.dsp {\n\ttype plug\n\tslave.pcm "dmix"\n}\n' | sed -e 's/\t/ /g' >> ~/.asoundrc


.asoundrc に追記した後、再起動する。

復旧方法

読込み順の変更、同時再生問題の対策共に、追記した内容を削除する。


設定ファイルを新規に作成した場合は、こちらで。


# rm /etc/modprobe.d/alsa-base.conf
$ rm $HOME/.asoundrc

気になった点

  • HDMIを使っているのに、snd_hda_intelが読込まれているのか分からない

> alsamixerでHDMIバイスを選択しても、元から無効になっている。

  • 設定の途中で、管理者権限が必要になる

> できれば、設定を.asoundrc の記述だけで完結したい


ArchWikiのALSAのページの、Alternative methodを参考にして、~/.asoundrc に


pcm.!default {
type hw
card 2
}

ctl.!default {
type hw
card 2
}

と書いて、サウンドカードの順番を変更した場合、ソフトウェアミキシングが効かなってしまった。


詳しく調べてはいないが、原因はたぶんArchLinuxフォーラムの、Arch Linux Forums: [SOLVED] Software mixing with ALSAが参考になるはず。
brebs氏の発言、The reason is, your "default" pcm now goes straight to "hw" (hardware) without going through dmix first. の通りだと思う。
設定ファイルをうまく書けば、.asoundrc の記述だけで、読込み順を変更しつつ、ミキシングも有効にできる...はず。

参考サイト

  1. ArchWiki: Advanced Linux Sound Architecture
    https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture
  2. Disable ATI HDMI audio from snd_hda_intel (was Re: Disable PCI devices via systemd)
    https://lists.fedoraproject.org/pipermail/users/2013-July/439078.html
  3. Arch Linux Forums: [SOLVED] Software mixing with ALSA
    https://bbs.archlinux.org/viewtopic.php?id=124868
[ このあたりが関係しているのか? Disable ATI HDMI audio from snd_hda_intel (was Re: Disable PCI devices via systemd)

Linux_Windowsデュアルブート環境時における時刻ずれの解決

LinuxWindowsデュアルブート環境において、各OSでの表示時刻がずれる現象が発生することがある。
この現象を解決する方法をまとめる。

環境

  • Linux側の環境
    • Arch Linux (x86_64, Kernel 3.12-9-2)
    • systemd (208-11)
    • ntp (4.2.6.p5-18)

解決法

Windows側の時刻系を、UTCに設定する。

                  • -

Linux側の時刻系を、localtimeにする解決法もある。
しかし、ハードウェアクロックがlocaltimeだと、サマータイムの切替時に時刻がおかしくなることがあるらしい。
そのため、時刻系は、UTCを用いるのが望ましいと思われる。

設定手順

設定は、以下の手順で行う。

  1. Linux側で設定されている時刻系の確認
  2. Windows側の時刻系の設定

Linux側で設定されている時刻系の確認
systemdでは、時刻系は、デフォルトでUTCに設定されている。
従って、Linux側での設定は、基本的には必要無い。


念の為、Linux側の時刻系が、UTCに設定されているかどうかを確認しておく。
"RTC in local TZ: no"と表示されればOK。

$ timedatectl status | grep local
RTC in local TZ: no

もし、"RTC in local TZ: yes"と表示されたら、時刻系はlocaltimeに設定されている。
その場合は、以下のコマンドを用いて、時刻系をUTCに設定しておく。


$ timedatectl status | grep local
RTC in local TZ: yes
# timedatectl set-local-rtc false
$ !-2
RTC in local TZ: no

Windows側の時刻系の設定
レジストリの[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]キーに、"RealTimeIsUniversal"という名称の、16進数の'1'のDWORD値を追加する。

                  • -

まず、管理者権限を持つユーザアカウントで、ログインをする。
次に、コマンドプロンプトを管理者で実行し、以下のコマンドを実行する。


> reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
最後に、再起動する。

復旧方法

Windows側の時刻系をlocaltimeに戻す手順をまとめる。

                  • -

レジストリに追加した"RealTimeIsUniversal"を削除する。

まず、管理者権限を持つユーザアカウントでログインをする。
次に、コマンドプロンプトを管理者で実行し、以下のコマンドを実行する。


> reg delete HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /f
最後に、再起動する。

原因

LinuxWindowsのそれぞれのOSにおいて、異なる時刻系を使用していることが原因である。

                  • -

コンピュータは、UTCとlocaltimeの2つの時刻系を用いて、時刻を管理している。

UTC(Universal Time Coordinated)
協定世界時GMT(グリニッジ標準時)とほぼ同義。
localtime
UTCタイムゾーンにおける時差を補正した時刻。

        • -

どの時刻系を既定として用いるのかは、OSによって異なる。
MacOSではUTCWindowsではlocaltime、Unix系では既定無し(UTCが使われることが多い)が、デフォルトとして設定されている。


OSは、起動時にCMOSからハードウェアクロックを読み出し、その時刻に設定された時刻系に基づいた修正を加え、システムクロックの時刻としている。
このとき、OSの時刻系がUTCであればロケールに基づいた時刻修正(Asia/Tokyoなら+0900)を行い、localtimeであれば修正を行わない。
また、OSは、シャットダウンする際に、現在のシステムクロックの時刻を、ハードウェアクロックとしてCMOSに書き込む。


したがって、OSの時刻系がUTCに設定されており、かつハードウェアクロックの時刻がlocaltimeの値である場合、時刻のずれが発生してしまう。
これは、タイムゾーンに基づいた時刻補正を既に行ったlocaltimeの値を、UTCと扱ってしまい、更に時刻補正を加えてしまうためである。

        • -

Linux_Windowsデュアルブート環境の場合、各OSの時刻系は、前述の通りデフォルトのままだと、Linux側はUTCWindows側はlocaltimeを用いているケースが多い。
そのため、この状況で、Windows側で時刻同期を行うと、Linux起動時に時刻ずれが発生してしまう。

参考サイト

  • ArchWiki: Time

https://wiki.archlinux.org/index.php/Time

  • ko-jiya528: 時刻設定にUTCを使う

http://ja.528p.com/linux/client/CA010-timezone.html

  • eのらぼらとり: パソコンの時計 ハードウェア クロックとシステム クロック

http://park12.wakwak.com/~eslab/pcmemo/clock/

雑感

  • GUI操作は、文章で説明しようとすると、けっこう難しい&くっそ面倒。
  • CUI操作は、コマンドをコピペすれば、とりあえず設定手順にはなるので、楽ちん。

WindowsでCaps_LockをCtrlに変更

Caps_LockをCtrlに変更するための、レジストリ操作コマンド。
唐突にWindows環境で作業することになった場合は、これをコピペして変更する。


(2014年 5月 3日 土曜日 22:40:20 JST 追記)
管理者権限がない場合、レジストリの書換えでの入替えはできない。
どうしても入替えたい場合は、AutoHotkeyなどのソフトウェアを使うか、HHKなどを使って物理的に入替えないと無理っぽい。

設定手順

管理者権限のあるユーザでログインし、コマンドプロンプトで以下のコマンドを実行する。

> reg add "HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout" /v "Scancode Map" /t REG_BINARY /d 0000000000000000020000001d003a0000000000
再起動する。

復旧方法

管理者権限のあるユーザでログインし、コマンドプロンプトで以下のコマンドを実行する。

> reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout" /v "Scancode Map" /f
再起動する。

参考サイト

  • tmytのらくがき: この世からCapslockを追放したい

http://tmyt.hateblo.jp/entry/20130220/1361388284

Trimの有効

Arch LinuxでTrimを有効にする方法をまとめる。

環境

  • Arch Linux (x86_64, Kernel 3.12-9-2)
  • SSD (CFD_CSSD-S6TM256NMPQ)

設定手順

まず、使用しているSSDがTRIMに対応しているかどうか確認する。
"Data Set Management TRIM supported"と表示されればOK。
(2014/02/15 時点、TRIMを利用できるのは、Kernel 2.6.28–25以降で、かつファイルシステムが、Ext4BtrfsJFSXFSのいずれかの場合のみ、おそらく)

# hdparm -I /dev/sdx | grep TRIM
* Data Set Management TRIM supported (limit 8 blocks)

次に、/etc/fstabファイルの内、SSDファイルシステムのフラグオプションに、"discard"を追記する。


# vi /etc/fstab
/dev/sda1 / ext4 defaults,noatime,discard 0 1
/dev/sda2 /home ext4 defaults,noatime,discard 0 2
/dev/sdb1 /home/media ext4 defaults,notime 0 2
/dev/sdb2 none swap defaults 0 0

復旧方法
fstabに追記した"discard"フラグを削除する。


# sed -i.bak 's/discard,//' /etc/fstab


参考サイト

  • ArchWiki: Solid_State_Drives

https://wiki.archlinux.org/index.php/Solid_State_Drives#TRIM


TODO

  • 本当にTRIMが有効になっているかどうか確認する

ネットワークインタフェースの名称変更

Systemd v197からPredictable Network Interface Namesが導入された。それにより、セキュリティ上の理由から、ネットワークインタフェースの名称がudevによって自動的に生成されるようになった。

しかし、新しい名称では、今までに作成したスクリプトの動作に影響が出るため、udevが名称を自動生成しない設定法をまとめる。

環境

  • Arch Linux (x86_64)
  • systemd (v197以降)

設定手順
空のシンボリックリンクを作成する。


# ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules


復旧方法
作成したシンボリックリンクを削除する。


# rm /etc/udev/rules.d/80-net-name-slot.rules


参考サイト

  • ArchWiki: Network_Configuration

https://wiki.archlinux.org/index.php/Network_Configuration#Network_Interfaces