[[TableOfContents]] == GentooLaptop == 젠투 리눅스 노트북사용자에게 편리할 만한 설정 모음. - 송효진 == 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 }}} == 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 }}} == ACPI == * /etc/acpi/default.sh 일단 default.sh 에서는 다 뺀다. * acpilog 의 주석을 풀고 이것저것 눌러보면 /acpilog.txt 에 로그가 쌓인다. 그걸 보고 스크립트 등록하면 된다. {{{#!/bin/sh # /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 가 담당하니 아무것도 안한다.) {{{#!/bin/bash }}} * net.sh, netstart.sh 는 아래에 설명한다. * lm_lid.sh (뚜껑덮기), lm_power.sh (전원버튼) {{{#!/bin/bash /usr/local/bin/net.sh hibernate-ram /usr/local/bin/netstart.sh }}} * lm_sleep.sh (xnote p300 의 경우 fn+f4 가 공식(?)수면모드 키인데 뚜껑과,전원에 할당하였으므로 그냥 화면을 최대한 어둡게 하는걸로 설정하였다. 자리를 오래 뜰 때 쓴다. 대부분의 ACPI 이벤트는 16진수로 카운트 된다. 따라서 아래와 같이 하면 적절히 토글되게 동작시킬 수 있다.) {{{#!/bin/bash case "$*" in *[13579bdf]) echo 1 > /proc/acpi/video/EGFX/LCD0/brightness ;; *[02468ace]) echo 7 > /proc/acpi/video/EGFX/LCD0/brightness ;; esac }}} == 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 으로 걸어놓았다. == 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 {{{#!/bin/bash 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 }}} == 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 {{{#!/bin/bash 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 }}}