Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: zsh portable script

On Wed, 14 Jul 2010, Atom Smasher wrote:

> On Tue, 13 Jul 2010, Benjamin R. Haskell wrote:
> > But, I don't recall ever needing root to read the battery status.  
> > (In the /proc/acpi subsystem that you're using, 
> > /proc/acpi/battery/BAT{0,1}/{info,state} are chmod 0444 on my laptop 
> > and netbook; same for the /sys/class/ stuff I used above.)  And on 
> > my FreeBSD webhost where I have pretty resticted access, I seem to 
> > be able to grab a lot of hardware-related info via sysctl.
> ==============
> from what i've seen, linux permissions to anything in /proc depend on 
> the distro, but the same *info* is available to anyone with local 
> access on a bsd box via sysctl.
> i'm more familiar with freebsd than linux. are you saying that 
> /sys/class/power_supply/BAT0/charge_* will be readable when 
> /proc/acpi/battery/BAT0/* isn't? if that's the case, i'll update the 
> script.

No.  I'm saying that I've never seen either one of those without full 
read permissions.  I've not tried them in multiple distros, but I'd be 
surprised if the commonly-used battery monitor 'widgets' required 
permissions beyond being a local account.

> > Are permissions the reason you suggest running it under cron? 
> > Otherwise, why not just regenerate in precmd()?
> ==================
> on my bsd laptop i always have at least one mrxvt with ten shells 
> open. it seems to make sense to just have root get the info once per 
> minute and let the shells read it from a file, than have a bunch of 
> shells all invoking sysctl and all figuring out about the battery.

Are those many shells all frequently generating prompts?  precmd only 
runs once per prompt.

> i suppose it can be done without privileges, and it shouldn't burden 
> the machine; then i suppose it might make sense to get rid of the 
> battery script and put the logic into precmd. i suppose the worst case 
> is a hundred or so shells all working it out for themselves... that 
> shouldn't cause any problems... except if the machine is bogged down 
> and it takes that much longer to wait for a prompt that's hung while 
> something it needs to generate a battery notice is blocked (although 
> that risk is probably there already with the load monitor). i might be 
> able to add a short timeout, in which case it will just skip it... 
> something to think about, i guess.

Just as a quick benchmark, running my perl one-liner that I posted 
before in a tight loop 10000 times only takes ~30 seconds.  But that's 
including the overhead of starting up perl (which takes ~26 seconds on 
my machine).

$ date ; for l in {1..10000} ; perl -lnwe 'if($a){print$a/$_}else{$a=$_}' /sys/class/power_supply/BAT0/charge_{now,full} > /dev/null ; date
Tue Jul 13 12:38:29 EDT 2010
Tue Jul 13 12:38:58 EDT 2010
$ date ; for l in {1..10000} ; perl -lwe 'print 1' > /dev/null ; date
Tue Jul 13 12:39:02 EDT 2010
Tue Jul 13 12:39:28 EDT 2010

And, like I said, since it's a once-per-prompt thing, merely having a 
bunch of open shells doesn't necessarily increase the load.

Worst-case, the 'installation process' for using this through precmd 
(put this wherever it'll get sourced properly) seems better than the 
cron version (put this into root's crontab).


Messages sorted by: Reverse Date, Date, Thread, Author