lilarcor's Blog

Happy coding

M11xR1 折腾记 --- 双显卡切换

M11xR1的双显卡是比较老式的那种,不像现在的主流双显示芯片那样---一块位于cpu内,一块独立于外部,M11xR1的是完全独立的两块,一块是intel 4500HD,一块是nvidia 315M。在bios中能切换禁用intel的或者是可切换的,没有nvidia的Optimus技术让程序自动判断选用什么样的显示核心。这样问题就来了,开机nvidia必定开启,而且也不能关闭。根据arch wiki里M11x的安装教学,想到了bumblebee和acpi_call结合的方式。记得老版本的bumblebee是有点远控制模块的,新版本去掉了,说是不稳定。因此安装bum仅仅是能够在运行程序时手工指定要使用的显卡,默认intel,optirun XXX则是nvidia。

安装:

1.bios中开启显卡为可切换模式

2.

vi /etc/modprobe.d/modprobe.conf

添加blacklist nouveau, 禁用开源的nvidia驱动

3.youart bumblebee,会自动帮你安装nvidia驱动和工具,注意安装后在rc.conf中添加nvidia模块,并且添加bumblebee 和auto_dkms的daemon,后者不添加的话,会导致升级内核后,nvidia的模块从内核中丢失。中间还会有一大堆组件,比如virtualgl等

4.yaourt acpi_call, 位于git中,源文件中有test off.sh,chmod +x后,测试一下。

5.接下来简单了,将test off复制到/etc/rc.d/中,并且添加到rc.conf中,并添加acpi_call模块

重启测试。正常情况开机后,nvidia已经关闭了,可以用lsmod查看,nvidia后应该有ff字样。

这样我使用了一年的电脑待机时间从2.5小时提高到5小时(轻度上网)

需要使用独立显卡运行游戏的时候,修改并另存一个test on 就好,具体就不说了,无非是off和on的切换。之后optirun

要注意的是,使用optirun后,不要再关闭nvidia显卡,否则一定概率死机。所以还是推荐重启一下比较好。

 

 

 

 

更新jre后,freemind突然不能输入中文

甚至连输入法都无法切换,最后rm -rf ~/.freemind 后重启freemind解决。java的真蛋疼啊

很奇怪的现象,就是从菜单中选择freemind运行,无法输入中文,从终端打命令运行则没有问题。应该也算是bug吧

M11xR1 折腾记 ---archlinux下Fn热键控制明暗度

使用archlinux一段时间了,M11xR1在arch的wiki上有文章介绍,基本安装和使用没有什么大问题。默认开启intel显卡,会发现Fn+F4/F5,不能调解明暗度。屏蔽intel显卡,使用nvidia闭源驱动没有问题。但是为了待机的时间够长还是决定使用intel显卡,并通过xmodmap来解决热键的映射。开始的想法是使用xev来捕获Fn+Fx的keycode,但是很不幸,没有反应。后来在查看xmodmap的wiki后得知可以通过xmodmap -pke 来获取keycode表。下面的内容基于archlinux 3.1内核,gnome 3.2

1.xmodmap -pke > ~/.Xmodmap

cat查看后,发现这样一段

keycode 232 = XF86MonBrightnessDown NoSymbol XF86MonBrightnessDown
keycode 233 = XF86MonBrightnessUp NoSymbol XF86MonBrightnessUp

从字面意思上看因该是显示器明暗度的+-。

接下来就是实现了。

2.使用wiki上的一段代码,发现有问题,后来在他的引用上找到三星笔记本上的一段引用,注意需要setpci和bc,并且需要sudo来执行setpci(非root用户),为了避免失效,还需要将当前用户加入sudovi时使用NOPASSWD参数。DEVICE=00:02.0可以用lspci查看。

#!/bin/bash
# increase/decrease/set/get the backlight brightness (range 0-255)
#
 
# PCI device on which to operate
DEVICE=00:02.0

# Amount to raise/lower the backlight when called with "up" or "down"
AMOUNT=8

# Minimum backlight value reachable via "down"
MIN=1

# Default backlight level when toggling on
DEFAULT=64
 
#get current brightness in hex and convert to decimal
var1=`sudo setpci -s $DEVICE F4.B`
var1d=$((0x$var1))
case "$1" in
       up)
               #calculate new brightness
               var2=`echo "ibase=10; obase=16; a=($var1d+$AMOUNT);if (a<255) print a else print 255" | bc`
               echo "$0: increasing brightness from 0x$var1 to 0x$var2"
               sudo setpci -s $DEVICE F4.B=$var2
               ;;
       down)
               #calculate new brightness
               var2=`echo "ibase=10; obase=16; a=($var1d-$AMOUNT);if (a>$MIN) print a else print $MIN" | bc`
               echo "$0: decreasing brightness from 0x$var1 to 0x$var2"
               sudo setpci -s $DEVICE F4.B=$var2
               ;;
       set)
               #n.b. this does allow "set 0" i.e. backlight off
               echo "$0: setting brightness to 0x$2"
               sudo setpci -s $DEVICE F4.B=$2
               ;;
       get)
               echo "$0: current brightness is 0x$var1"
               ;;
       toggle)
               if [ $var1d -eq 0 ] ; then
                       echo "toggling up"
                       sudo setpci -s $DEVICE F4.B=$DEFAULT
               else
                       echo "toggling down"
                       sudo setpci -s $DEVICE F4.B=0
               fi
               ;;
       *)
               echo "usage: $0 {up|down|set <val>|get|toggle}"
               ;;
esac
exit 0



3.把上面的代码制作成backlight文件,chmod +x ,然后就可以尝试一下命令是否有效。

4.确认有效后,就要开始绑定按键了。先开启gnome的keyboard工具,到按键绑定里,选择自定义,添加,注意,这里绑定Fn+FX不会成功,随便绑定一下。名称随便,命令就是/sbin/backlight down和 /sbin/backlight up。 再次测试是否有效。

5.通过keyboard的ui界面是不能绑定fn按键的,需要直接修改他的配置文件。

vi ~/.gconf/desktop/gnome/keybindings/custom0/%gconf.xml,修改为

<?xml version="1.0"?>
<gconf>
    <entry name="action" mtime="1322567245" type="string">
        <stringvalue>/sbin/backlight down</stringvalue>
    </entry>
    <entry name="name" mtime="1322567245" type="string">
        <stringvalue>backlight down</stringvalue>
    </entry>
    <entry name="binding" mtime="1322567232" type="string">
        <stringvalue>XF86MonBrightnessDown</stringvalue>
    </entry>
</gconf>


 

 

vi ~/.gconf/desktop/gnome/keybindings/custom1/%gconf.xml,修改为

<?xml version="1.0"?>
<gconf>
    <entry name="action" mtime="1322564296" type="string">
        <stringvalue>/sbin/backlight up</stringvalue>
    </entry>
    <entry name="name" mtime="1322564296" type="string">
        <stringvalue>backlight up</stringvalue>
    </entry>
    <entry name="binding" mtime="1322567397" type="string">
        <stringvalue>XF86MonBrightnessUp</stringvalue>
    </entry>
</gconf>


 

再次回到keyboard ui设置界面,发现都是disabled的,再次绑定,但是这次绑定用Fn+F4/F5。

 

测试成功。