#!/usr/local/bin/perl @ARGV or die "Usage: $0 <0..255>\n"; $vol = shift; sub AUDIO_GETINFO { 0x40844101 } sub AUDIO_SETINFO { 0xC0844102 } $template = "LLLL LLLLL L LL CCCC S CC"; $template = "$template $template L CCCC LLL"; open AC, "+</dev/audioctl" or die "cannot open /dev/audioctl\n"; select((select(AC), $| = 1)[0]); ioctl AC, AUDIO_GETINFO, $buf or die "AUDIO_GETINFO failed: $!\n"; @au_info = unpack $template, $buf; $au_info[4] = $vol; $buf = pack $template, @au_info; ioctl AC, AUDIO_SETINFO, $buf or die "AUDIO_SETINFO failed: $!\n"; close AC;