LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1828|回复: 21

[分享]多媒体键与音量的OSD显示

[复制链接]
发表于 2009-3-11 16:41:22 | 显示全部楼层 |阅读模式
最近搞了Openbox,用tint作任务栏,发现没了音量托盘(用KDE用多了)很不舒服,并且自己键盘的多媒体键一直没在Linux下使用,于是……

一、多媒体键

关于多媒体键的设置可以参照Gentoo讨论区的多媒体键设置指南

主要是说:用xev,按多媒体键,如果在keycode一行有XF86xxx之类,如下
……
state 0x0, keycode 121 (keysym 0x1008ff12, XF86AudioMute)
……
说明内核已经正确识别该多媒体键了。

否则,将
keycode 162 = XF86AudioPlay
keycode 164 = XF86AudioStop
keycode 160 = XF86AudioMute
……
之类写到~/.Xmodmap中,再xmodmap之

xmodmap ~/.Xmodmap
二、OSD显示

安装xosd,用来作OSD显示:
sudo pacman -Sy xosd
写一bash脚本如下:
#!/usr/bin/env bash
   
    CHANNEL=PCM
    color=green
    ACTION===
   
    if [ "$1" = "-h" ] || [ "$1" = "--help" ] ; then
      p=$(basename $0)
      echo "Usage: $p [-h] [频道] [+|-|m]

  -h, --help  显示此帮助信息并退出
  频道        所要设置的频道,如PCM、Master等,默认为PCM
  +        设置音量数值增加5%
  -        设置音量数值减少5%
  m        在静音与放音间切换"

      exit 0
   fi
   
    if [ $# -eq 2 ] ; then
      CHANNEL=$1
      shift
    fi
   

    function vol_osd {
      killall osd_cat &> /dev/null
      VOL_STAT=$(get_vol_stat)
      if [ "$VOL_STAT" = "on" ]
        then  color="green"
      else       
              color="red"  
      fi
      osd_cat -d 2 -O 1 -u black  -l 2 -p bottom -o 60 -c $COLOR \
        -f "-adobe-helvetica-bold-r-normal-*-*-320-*-*-p-*-iso8859-1" \
        -T "Volume $CHANNEL: $(get_vol_level)  $ACTION"\
               -b percentage -P $(get_vol_level) &
    }

    function get_vol_level {
      amixer get $CHANNEL |\
      grep 'Front Left:'  |\
      cut -d " " -f 7     |\
      sed 's/[^0-9]//g'
    }

    function get_vol_stat {
            amixer get $CHANNEL |\
        grep 'Front Left:'  |\
        cut -d " " -f 9     |\
        sed 's/[^a-z]//g'
    }


    case "$1" in

      "+")
        amixer -q set $CHANNEL 5%+
        ACTION="++"

        ;;
      "-")
        amixer -q set $CHANNEL 5%-
        ACTION="--"

        ;;
      "m")
        amixer -q set $CHANNEL toggle
        if [ "$(get_vol_stat)" = "on" ]
          then  ACTION="=)("
       else       
                    ACTION="=()"
       fi
        ;;

esac
       vol_osd
保存之(我将其存为~/bin/volume),并chmod +x 之。

测试下,就可以看到OSD:
cd bin
./volume -h
./volume
./volume +
./volume -
./volume m
./volume Master -
等等……
三、写入Openbox的快捷键

编辑.config/openbox/rc.xml,在<keyboard> ……</keyboard>间加入:
    </keybind>
    <keybind key="XF86AudioLowerVolume">
      <action name="Execute">
        <execute>~/bin/volume -</execute>
      </action>
    </keybind>
    <keybind key="XF86AudioRaiseVolume">
      <action name="Execute">
        <execute>~/bin/volume +</execute>
      </action>
    </keybind>
    <keybind key="XF86AudioMute">
      <action name="Execute">
        <execute>~/bin/volume m</execute>
      </action>
    </keybind>
    <keybind key="C-XF86AudioLowerVolume">
      <action name="Execute">
        <execute>~/bin/volume Master -</execute>
      </action>
    </keybind>
    <keybind key="C-XF86AudioRaiseVolume">
      <action name="Execute">
        <execute>~/bin/volume Master +</execute>
      </action>
    </keybind>
    <keybind key="C-XF86AudioMute">
      <action name="Execute">
        <execute>~/bin/volume Master m</execute>
      </action>
    </keybind>
这样,单按相应多媒体键是对PCM进行操作,按Ctrl+多媒体键是对Master进行操作。

注销Openbox,OK    截个图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2009-3-11 17:12:11 | 显示全部楼层
俺装amarok,第一个干掉的功能就是osd显示,哈哈,怕被打扰,不过开pidgin,第一个打开的功能确是类似这个的lipnotify popup,真是奇妙啊
回复 支持 反对

使用道具 举报

发表于 2009-3-11 17:27:47 | 显示全部楼层
谢谢分享!很好的经验!

最近我也在搞openbox+pypanel,现在调整音量是通过在pypanel上那个显示时间的地方滚动鼠标滚轮实现的,等有空也试试楼主的方法。
回复 支持 反对

使用道具 举报

发表于 2009-3-11 18:41:42 | 显示全部楼层
曾经也搞过一个类似的osd小脚本,不过用的是ghosd,那个显示效果比xosd稍微要好看一点,可以调透明度,带阴影之类的
回复 支持 反对

使用道具 举报

发表于 2009-3-11 19:31:10 | 显示全部楼层
留个脚印~~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-11 21:22:58 | 显示全部楼层
Post by autumnc;1959434
曾经也搞过一个类似的osd小脚本,不过用的是ghosd,那个显示效果比xosd稍微要好看一点,可以调透明度,带阴影之类的
嗯,ghosd效果的确不错。但我的目的是要搞得像电视机的那样,所以选用这个。其实我还想像电视机换台时在右上角显示台号一样,当我切换工作空间时也在右上角显示工作空间号。

显然这个难住就大了一点,不知从何入手。
回复 支持 反对

使用道具 举报

发表于 2009-3-11 23:24:04 | 显示全部楼层
$ ./volume -
$ Unable to open: percentage

怎么我的没效果,./volume m 倒是静音了。
回复 支持 反对

使用道具 举报

发表于 2009-3-11 23:35:51 | 显示全部楼层
我用tpb显示音量、屏幕亮度等等。
回复 支持 反对

使用道具 举报

发表于 2009-3-12 00:12:04 | 显示全部楼层
我目前是用notify-send。osd从来都没有研究过。。看起来还不错。好看一点就好了...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-12 00:40:01 | 显示全部楼层
Post by xblx;1959617
$ ./volume -
$ Unable to open: percentage

怎么我的没效果,./volume m 倒是静音了。
发贴时搞错了,现在改回来了。

晕原来还是不行,我这却可以。用我的附件吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表