· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Gentoo Laptop


1. GentooLaptop

젠투 리눅스 노트북사용자에게 편리할 만한 설정 모음. - 송효진

2. Packages

  • USE 를 반드시 보자. nvidia, nforce2 등이 있다.
emerge acpi acpid acpitool cpufreqd cpufrequtils laptop-mode-tools hibernate-script
  • xfce4 용 각종 모니터링 도구. 없어도 상관없지만 하단에 좌악 늘어놓으면 멋있다.
emerge xfce4-battery xfce4-cpu-freq xfce4-cpugraph xfce4-netload xfce4-sensors xfce4-systemload xfce4-wavelan

3. init.d

rc-update add acpid default
rc-update add cpufreqd default
rc-update add cpufrequtils default
rc-update add lm_sensors default
rc-update add laptop_mode default

4. ACPI

  • /etc/acpi/default.sh 일단 default.sh 에서는 다 뺀다.
  • acpilog 의 주석을 풀고 이것저것 눌러보면 /acpilog.txt 에 로그가 쌓인다. 그걸 보고 스크립트 등록하면 된다.
# /etc/acpi/default.sh
# Default acpi script that takes an entry for all actions

set $*
#echo $* >> /acpilog.txt

group=${1%%/*}
action=${1#*/}
device=$2
id=$3
value=$4
  • /etc/acpi/events/default 를 제외하고 모두 날린 후 아래것으로 대체하자.
  • 이 파일이 수정되면 /etc/init.d/acpid 를 restart 해야 한다.
  • lm_ac_adapter
event=ac_adapter
action=/etc/acpi/actions/lm_ac_adapter.sh %e
  • lm_battery
event=battery.*
action=/etc/acpi/actions/lm_battery.sh %e
  • lm_lid
event=button[ /]lid
action=/etc/acpi/actions/lm_lid.sh %e
  • lm_power
event=button[ /]power
action=/etc/acpi/actions/lm_power.sh %e
  • lm_sleep
event=button[ /]sleep
action=/etc/acpi/actions/lm_sleep.sh %e
  • /etc/acpi/actions/ 도 다 날려버린 후 아래것으로 대체하자. 여기는 x 권한이 필요하다.
  • lm_ac_adapter.sh, lm_battery.sh (cpufreq 가 담당하니 아무것도 안한다.)

  • net.sh, netstart.sh 는 아래에 설명한다.
  • lm_lid.sh (뚜껑덮기), lm_power.sh (전원버튼)
/usr/local/bin/net.sh
hibernate-ram
/usr/local/bin/netstart.sh
  • lm_sleep.sh (xnote p300 의 경우 fn+f4 가 공식(?)수면모드 키인데 뚜껑과,전원에 할당하였으므로 그냥 화면을 최대한 어둡게 하는걸로 설정하였다. 자리를 오래 뜰 때 쓴다. 대부분의 ACPI 이벤트는 16진수로 카운트 된다. 따라서 아래와 같이 하면 적절히 토글되게 동작시킬 수 있다.)
case "$*" in
	*[13579bdf])
		echo 1 > /proc/acpi/video/EGFX/LCD0/brightness
		;;
	*[02468ace])
		echo 7 > /proc/acpi/video/EGFX/LCD0/brightness
		;;
esac

5. cpufreq

  • AC전원, 배터리 모드 등에 능동적으로 반응하는 스크립트다. 안건드려도 기본값이 꽤 잘 되어있지만, LCD 밝기조절을 걸어놓으면 더 좋다.
  • /etc/cpufreqd.conf 의 Rule 쪽 부분의 exec_post 에 적절히 스크립트를 걸면 된다.
  • 예제에는 소니 /proc/acpi/sony/brightness 가 걸려있고, xnote p300 (nvidia 8400M GS) 은 /proc/acpi/video/EGFX/LCD0/brightness 이다. find /proc/acpi -name brightness 하면 쉽게 찾을 수 있다.
  • 나는 AC 7, Battery High 5, Battery Medium 4, Battery Low 3 으로 걸어놓았다.

6. net.sh

  • 어느 배포판이든 집과 회사를 왔다갔다 하고, 유선과 무선을 오가는 상황에서의 능동적인 대처가 되는 스크립트를 제공하지는 않는것 같다. 그래서 만들었다.
  • VirtualBox 용 bridge 설정도 한꺼번에 되므로 필요없는 부분은 지워주면 된다.
  • 무선 bridge 에 필요한 parprouted 는 layman gentoo-kr 에 올려놓았고 bcrelay 는 net-dialup/pptpd 에 들어있다.
  • acpi 의 절전모드 직전에 걸어놓았으므로 절전되기 전에 네트워크를 끊는다.
  • 사용법 net.sh eth0, net.sh wlan0, net.sh (끊기)
  • /usr/local/bin/net.sh
killall -TERM dhcpcd
# for bridge start
killall -TERM parprouted
killall -TERM bcrelay
brctl delif br0 eth0
brctl delif br0 wlan0
brctl delif br0 wmaster0
brctl delif br0 tap0
brctl delif br0 tap1
# for bridge end
ifconfig eth0 0.0.0.0
ifconfig eth0 down
ifconfig wlan0 0.0.0.0
ifconfig wlan0 down
# for bridge start
ifconfig tap0 0.0.0.0
ifconfig tap1 0.0.0.0
ifconfig br0 down
brctl delbr br0
# for bridge end
rmmod iwlagn iwlcore # 4965 wireless 안쓸때 모듈조차 내려버리면 전원에 도움 좀 될것같다. 근거는 없음.
/etc/init.d/iptables stop # for bridge

case "$1" in
	eth0)
		ifconfig eth0 up
# for bridge start
		brctl addbr br0
		brctl addif br0 eth0
		dhcpcd br0 -A
		brctl addif br0 tap0
		brctl addif br0 tap1
# for bridge end
# not bridge : dhcpcd eth0 -A
	;;
	wlan0)
		modprobe iwlagn # 자신에게 맞는 wireless 모듈
		ifconfig wlan0 up
		ESSIDS=`iwlist wlan0 scanning | grep ESSID | sed -e 's/\s*ESSID://g' -e 's/"//g'`
		KNOWNS="myessid companyessid iptime" # 여기에 자신이 사용하는 essid 를 적는다.
		for ESS in $KNOWNS;
		do
			ESSID=`echo "$ESSIDS" | grep $ESS`
			if [[ "$ESSID" != "" ]]; then
				break
			fi
		done
		if [[ "$ESSID" == "" ]]; then
			ESSID=`echo "$ESSIDS" | head -n 1`
		fi
		iwconfig wlan0 essid $ESSID
		if [[ "$ESSID" == "companyessid" ]]; then
			# 암호가 필요하면 이렇게 하면 된다.
			iwconfig wlan0 key s:BF43425FC5B123
			iwconfig wlan0 essid companyessid
		fi
		echo $ESSID
		dhcpcd wlan0 -A
# for bridge start
		WLANIP=`ifconfig wlan0 | grep 'inet addr' | awk '{ print $2 }' | awk -F : '{ print $2 }' | awk -F . '{ print $1"."$2"."$3 }'`
		ifconfig tap0 $WLANIP.222 netmask 255.255.255.0
		ifconfig tap1 $WLANIP.223 netmask 255.255.255.0
		route del -net 192.168.0.0 netmask 255.255.255.0 tap0
		route del -net 192.168.0.0 netmask 255.255.255.0 tap1
		/etc/init.d/iptables start
		parprouted wlan0 tap0
		parprouted wlan0 tap1
		route add -net 192.168.0.0 netmask 255.255.255.0 tap0
		route add -net 192.168.0.0 netmask 255.255.255.0 tap1
		bcrelay -i tap0 -o wlan0 -d
		bcrelay -i tap1 -o wlan0 -d
# for bridge end
	;;
esac
  • 무선으로 bridge 를 사용한다면 iptables 룰 하나를 추가하자.
  • /etc/sysctl.conf 의 net.ipv4.ip_forward = 1 주석을 해제하고
  • echo 1 > /proc/sys/net/ipv4/ip_forward
/etc/init.d/iptables start
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
/etc/init.d/iptables save
/etc/init.d/iptables stop

7. netstart.sh

  • 전원을 켜거나 절전모드에서 나올 때 유/무선 구별 없이 dhcp 시도를 하면 곤란할것이다.
  • 유선의 연결여부 파악을 위해 ethtool 을 사용한다. 이더넷선을 빼면 10M Half 가 되고 꽂으면 100M Full 이 되는 상태를 이용했다. 10M Half 를 쓰는곳은 설마 없겠지.
  • 유선이 꽂혀있나 확인한 후 접속하고, 안꽂혀있거나 접속이 되지 않으면 무선을 시도한 후 그마저 실패하면 모두 정지한다.
  • acpi 이벤트로 걸어놓았으므로 절전모드에서 살아날 때 실행될 것이다.
  • echo /usr/local/bin/netstart.sh > /etc/X11/xinit/xinitrc.d/80-net; chmod 755 /etc/X11/xinit/xinitrc.d/80-net 정도 해 놓으면 X 뜰때 실행된다. /etc/conf.d/local 에 놓으면 그만큼 지연이 생긴다.
  • /usr/local/bin/netstart.sh
NET=/usr/local/bin/net.sh
ethstart () {
	STATE=`ethtool eth0 | grep Duplex | awk -F : '{ print $2 }'`
	if [[ "$STATE" == " Full" ]]; then
		$NET eth0
		STATE=`ifconfig br0 | grep 'inet addr' | awk '{ print $2 }' | awk -F : '{ print $2 }' | awk -F . '{ print $1"."$2 }'` # bridge 안쓰면 br0 대신 eth0
		if [[ "$STATE" == "169.254" ]]; then
			wlanstart
		fi
		exit
	fi
}
wlanstart () {
	$NET wlan0
	STATE=`ifconfig wlan0 | grep 'inet addr' | awk '{ print $2 }' | awk -F : '{ print $2 }' | awk -F . '{ print $1"."$2 }'`
	if [[ "$STATE" == "169.254" ]]; then
		$NET
		exit
	fi
}

ethstart
wlanstart

ID
Password
Join
You have the power to influence all with whom you come in contact.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2008-11-22 17:49:26
Processing time 0.0083 sec