Brightness & colour temperature control for desktop PCs

Window managers, icon programs, widgets, etc.
Message
Author
belham2
Posts: 1715
Joined: Mon 15 Aug 2016, 22:47

#41 Post by belham2 »

Hi Fred & Billtoo,

Well, I finally got redshift-cli working in latest Easy.

I tried numerous times and couldn't even get any of the redshifts I have (have got all of yours, Fred)....same thing was happening with Beaver. But, suddenly, installing MikeWalsh's stuff got redshift-cli working. Doing it from PPM or from a pet install (or manually dropping stuff in their respective folders like I am used to doing) wouldn't work.

Anyhow, I am giving up Quirky Beaver since Barry is stopping work on it, so that's no biggie. But it was really bugging in Easy......I am fairly proficient at getting this too work (once you give me what needs to go in /usr/bin) and/or figuring out why/where it isn't working after that.

But it was stumping me.......and I tried both full installs of Easy and frugal installs (a little more difficult to do with Barry's Easy stuff) to USB.

Anyhow, redshift-cli with SCT is working now, and everything is great.

Now if I just figure out how Barry got Seamonky to have audio while in a Container yet I cannot get Firefox to have audio, then all will be right with the Easy world :wink:

Thanks again guys.

User avatar
Mike Walsh
Posts: 6351
Joined: Sat 28 Jun 2014, 12:42
Location: King's Lynn, UK.

#42 Post by Mike Walsh »

@ belham2:-

I'm just pleased someone's finding it useful, mate.

The only part of this I can lay claim to is the original idea (that of making this work for desktops). And even that was inspired by johnywhy's thread..!

(Oh, perhaps compiling the SCT binary we used here. Maybe.)

I played around with YAD a bit, to see what I could come up with.....and then had to ask for assistance. The important stuff (the code) that makes it work, that was all Fred's doing. Really & truly, this was Fred's baby, in that respect....not mine at all.

So Fred should get the credit, not me. I refuse to take credit for the work of others; it's not on. In the end, I don't care who gets credit, if I'm honest; if I play even a small part in getting something up-and-running that'll benefit the whole Puppy community, I'm cool with that.

Original idea by johnywhy.
SCT discovered by labbe5.
Coding performed by Fred.

So, as you can see, I had very little to do with this at all.....

I just want our community to be something to be proud of, regardless of the endless bickering and 'in-fighting' that seems embedded within certain camps.....and to have plenty of choice when it comes to useful packages/utilities for our favourite wee OS. Perhaps I'm viewing the whole shebang thru' 'rose-tinted specs'; that's just me, I guess. If others have half as much fun with their Puppy boxes as I've had this last 4 years or so.....then it's all good, as far as I'm concerned.

Perhaps I'm just altruistic..! :lol:


Mike. :wink:

User avatar
gjuhasz
Posts: 422
Joined: Mon 29 Sep 2008, 14:28

Small changes

#43 Post by gjuhasz »

Hi,

I made some small changes on the Brightness_control package

1. Restarting X does not reset the Brightness value
2. Smaller size control, no buttons
3. New tray icon pops up / closes the control

Downloadable from http://www.smokey01.com/gjuhasz/packages.

Have fun!

Regards,

gjuhasz
Attachments
Brightness_control.jpg
(8.9 KiB) Downloaded 285 times
Last edited by gjuhasz on Sun 07 Oct 2018, 22:37, edited 1 time in total.

User avatar
Mike Walsh
Posts: 6351
Joined: Sat 28 Jun 2014, 12:42
Location: King's Lynn, UK.

#44 Post by Mike Walsh »

Hi, gjuhasz.

Thanks for that, mate.

The only reason I made the 'control' itself as big as I did was quite simple; I'm not keen on fiddling around with small-ish controls..!

Be that as it may, the very nature of GNU/Linux positively encourages 'forking', modifying, and re-releasing. I'm absolutely cool with that. And when all's said & done, not everybody wants the added complexity of the redshift back-end...

This is remaining true to the original concept of this thread. So; thanks again. With the number of versions we now have available for this kinda thing, there's bound to be one that will suit most Puppians..!

Nice one.


Mike. :wink:

User avatar
greengeek
Posts: 5789
Joined: Tue 20 Jul 2010, 09:34
Location: Republic of Novo Zelande

#45 Post by greengeek »

MochiMoppel wrote:Xrandr itself is not a problem and - unlike johnywhy's approach - works for me. I also noticed that parsing its output for Brightness rather than for connected gives better results as xrandr will list Brightness of a monitor only if it's actually "on". A laptop with lid closed and screen off is still listed as connected but Brightness is not included in its properties list.
Do you have a test pet that I could trial on Slacko 5.6? (I am not keen to add sct or yad). cheers!

User avatar
Mike Walsh
Posts: 6351
Joined: Sat 28 Jun 2014, 12:42
Location: King's Lynn, UK.

#46 Post by Mike Walsh »

(deleted - n/a)
Last edited by Mike Walsh on Tue 09 Oct 2018, 23:38, edited 2 times in total.

User avatar
MochiMoppel
Posts: 2084
Joined: Wed 26 Jan 2011, 09:06
Location: Japan

#47 Post by MochiMoppel »

greengeek wrote:Do you have a test pet that I could trial on Slacko 5.6? (I am not keen to add sct or yad). cheers!
Sorry, no pet, just a testscript. I haven't tested extensively since I don't need and use it. IIRC worked OK on my Slacko 5.6.
Uses gtkdialog and Xdialog.
Supports more than 1 attached monitor (e.g. Laptop/Docking station + external monitor)
Supports Up/Down keys
Exits when focus is reset to window or desktop

I tested with a traybutton in JWM. No icon, just a Unicode symbol:

Code: Select all

<TrayButton label="◑">exec:/usr/bin/mm_brightness_slider</TrayButton>
The script:

Code: Select all

#!/bin/bash
ALIVE=$(xrandr --verbose | tr "\n" "\x0" | sed '	#replace linefeeds with NULL characters, thus putting the whole output on a single line
s/\x0[A-Z]/\n&/g		#xrandr output is indented. Only 'Screen' and Monitors appear left aligned, i.e they follow immediately after a linefeed. This command adds a 'real' lf before them
s/\x0//g' | sed -r '	#remove all NULL characters and pipe to another sed in order to detect newly inserted LFs
/Brightness/!d			#remove all lines not containing Brightness (leaving only monitors set 'on')
')
MON=$(echo "$ALIVE" | awk '{print $1}')		#may produce more than 1 monitor
if [ $(echo "$MON" | wc -l) -gt 1 ];then	#if more than 1, ask!
	XLIST=
	for monitor in $MON ;do
	XLIST="$XLIST $monitor $monitor off" 
	done
	MON=$(Xdialog --title "Brightness" --under-mouse --stdout --no-tags --radiolist "Please select monitor" x 4 $XLIST)
	[ $? != 0 ] && exit
fi
BrCur=$(echo  "$ALIVE" | sed -nr "s/$MON.*Brightness[: ]*([0-9.]*).*/\1/p" )
BrMax=1
BrMin=0.1
export STARTTIME=$(date +%s%2N)	#work around for bug that immediately fires focus-out-event (= exit) when slider opened on a desktop with no windows 
echo -n '
<window  type-hint="6" margin="0" window_position="2">
	<vscale range-value="'$BrCur'" range-min="'$BrMin'" range-max="'$BrMax'" range-step="0.05" width-request="28" height-request="200" inverted="true">
		<variable>vSLIDER</variable>
		<action>xrandr --output "'$MON'" --brightness $vSLIDER</action> 
	</vscale>
	<action signal="focus-out-event" condition="command_is_true(N=$(date +%s%2N);[ $((N-STARTTIME)) -gt 150 ] && echo true)">exit:</action>
</window>'|gtkdialog  -s
Attachments
mm_brightness_slider.png
(9.58 KiB) Downloaded 433 times

User avatar
greengeek
Posts: 5789
Joined: Tue 20 Jul 2010, 09:34
Location: Republic of Novo Zelande

#48 Post by greengeek »

MochiMoppel wrote:I tested with a traybutton in JWM. No icon, just a Unicode symbol:

Code: Select all

<TrayButton label="◑">exec:/usr/bin/mm_brightness_slider</TrayButton>
My slider seems to have lost it's bottom. Is that something peculiar with my setup?
Attachments
slider_R.jpg
(7.75 KiB) Downloaded 390 times
slider_L.jpg
(19.9 KiB) Downloaded 395 times

User avatar
MochiMoppel
Posts: 2084
Joined: Wed 26 Jan 2011, 09:06
Location: Japan

#49 Post by MochiMoppel »

greengeek wrote:Is that something peculiar with my setup?
Definitely. In a pristine Slacko 5.6. the whole slider would be displayed. Your screenshot looks very strange. IMO this can only happen when the selected screen resolution and the physical resolution of the monitor don't match or when the wm is buggy. A window manager should never ever open a window off screen. Which JWM version do you use?

User avatar
fabrice_035
Posts: 765
Joined: Mon 28 Apr 2014, 17:54
Location: Bretagne / France

#50 Post by fabrice_035 »

hey,

Not working for me

Code: Select all

(gtkdialog:5862): Gtk-CRITICAL **: IA__gtk_vscale_new_with_range: assertion 'step != 0.0' failed

(gtkdialog:5862): Gtk-CRITICAL **: IA__gtk_range_set_value: assertion 'GTK_IS_RANGE (range)' failed
**
ERROR:variables.c:189:variables_new_with_widget: assertion failed: (widget != NULL)
./add.sh: line 27:  5861 Done                    echo -n '
<window  type-hint="6" margin="0" window_position="2">
   <vscale range-value="'$BrCur'" range-min="'$BrMin'" range-max="'$BrMax'" range-step="0.05" width-request="28" height-request="200" inverted="true">
      <variable>vSLIDER</variable>
      <action>xrandr --output "'$MON'" --brightness $vSLIDER</action>
   </vscale>
   <action signal="focus-out-event" condition="command_is_true(N=$(date +%s%2N);[ $((N-STARTTIME)) -gt 150 ] && echo true)">exit:</action>
</window>'
      5862 Aborted                 | gtkdialog -s
I use that, my old tiny brightness control

Code: Select all

#!/bin/sh

# mini tool ! Easy change luminosity (mouse wheel)
#
# !!!! right for DELL XPS 1640 !!!!
#
#  14 fev 2016

b=`cat /sys/class/backlight/acpi_video0/actual_brightness `

lumi () {
if [ "$hs" -lt "0" ] ; then
hs="1"
echo $(( $b + $hs )) > /sys/class/backlight/acpi_video0/brightness
exit 0
fi
echo $(( $b + $hs )) > /sys/class/backlight/acpi_video0/brightness

}
export -f lumi

GTKDIALOG=gtkdialog

MAIN_DIALOG='
<window title="Lum" decorated="false"  skip_taskbar_hint="true"  window_position="2">
   
<vbox border-width="1" spacing="1">
   <hbox homogeneous="true">
<button use-stock="true" >  <input file stock="gtk-quit"></input> </button>
            <hscale space-expand="true" space-fill="true" range-min="1"  range-max="16" range-value="'$b'"  range-step="1" tooltip-text="change luminosity">
               <variable>hs</variable>
            <action>lumi</action>
            </hscale>
         </hbox>
         </vbox>
   <variable>MAIN_DIALOG</variable>
</window>
'
export MAIN_DIALOG
case $1 in
   -d | --dump) echo "$MAIN_DIALOG" ;;
   *) $GTKDIALOG  --program=MAIN_DIALOG ;;
esac 


User avatar
fredx181
Posts: 4448
Joined: Wed 11 Dec 2013, 12:37
Location: holland

#51 Post by fredx181 »

fabrice_035 wrote:Not working for me

Code:

(gtkdialog:5862): Gtk-CRITICAL **: IA__gtk_vscale_new_with_range: assertion 'step != 0.0' failed

(gtkdialog:5862): Gtk-CRITICAL **: IA__gtk_range_set_value: assertion 'GTK_IS_RANGE (range)' failed
**
ERROR:variables.c:189:variables_new_with_widget: assertion failed: (widget != NULL)
......
......
Yes, tried on a few OS's with same gtkdialog version, on one I get the same errors as above, on the others it works fine.
Can't figure out what causes this.

Fred

User avatar
fabrice_035
Posts: 765
Joined: Mon 28 Apr 2014, 17:54
Location: Bretagne / France

#52 Post by fabrice_035 »

Must have range-step="1" , range-step=".01" crash

that it's ok :

Code: Select all

#!/bin/bash
ALIVE=$(xrandr --verbose | tr "\n" "\x0" | sed '   #replace linefeeds with NULL characters, thus putting the whole output on a single line
s/\x0[A-Z]/\n&/g      #xrandr output is indented. Only 'Screen' and Monitors appear left aligned, i.e they follow immediately after a linefeed. This command adds a 'real' lf before them
s/\x0//g' | sed -r '   #remove all NULL characters and pipe to another sed in order to detect newly inserted LFs
/Brightness/!d         #remove all lines not containing Brightness (leaving only monitors set 'on')
')
MON=$(echo "$ALIVE" | awk '{print $1}')      #may produce more than 1 monitor
if [ $(echo "$MON" | wc -l) -gt 1 ];then   #if more than 1, ask!
   XLIST=
   for monitor in $MON ;do
   XLIST="$XLIST $monitor $monitor off"
   done
   MON=$(Xdialog --title "Brightness" --under-mouse --stdout --no-tags --radiolist "Please select monitor" x 4 $XLIST)
   [ $? != 0 ] && exit
fi
BrCur=$(echo  "$ALIVE" | sed -nr "s/$MON.*Brightness[: ]*([0-9.]*).*/\1/p" )
BrMax=9
BrMin=1
export STARTTIME=$(date +%s%2N)   #work around for bug that immediately fires focus-out-event (= exit) when slider opened on a desktop with no windows
echo -n '
<window  type-hint="6" margin="0" window_position="2">
   <vscale range-value="'$BrCur'" range-min="'$BrMin'" range-max="'$BrMax'" range-step="1" width-request="28" height-request="200" inverted="true">
      <variable>vSLIDER</variable>
      <action>xrandr --output "'$MON'" --brightness "'0.'"$vSLIDER</action>
   </vscale>
   <action signal="focus-out-event" condition="command_is_true(N=$(date +%s%2N);[ $((N-STARTTIME)) -gt 150 ] && echo true)">exit:</action>
</window>'|gtkdialog  -s

User avatar
fredx181
Posts: 4448
Joined: Wed 11 Dec 2013, 12:37
Location: holland

#53 Post by fredx181 »

fabrice_035 wrote:Must have range-step="1" , range-step=".01" crash

that it's ok :
....
That works, but then the maximum brightness to adjust is only 0.90

I think I found why it didn't work on one OS for me, I had that one set to Dutch language.
When I do e.g:

Code: Select all

LANG=C /usr/bin/mm_brightness_slider
Then the original script from MochiMoppel works fine for me.
EDIT: Or add on top of script:

Code: Select all

export LANG=C 
EDIT: Just to mention, to make it work, I changed first line "tr" command to "busybox tr" (Debian Stretch here)

Fred
Last edited by fredx181 on Tue 09 Oct 2018, 17:25, edited 1 time in total.

User avatar
fabrice_035
Posts: 765
Joined: Mon 28 Apr 2014, 17:54
Location: Bretagne / France

#54 Post by fabrice_035 »

fredx181 wrote: That works, but then the maximum brightness to adjust is only 0.90
Change BrMax=9 :wink:

User avatar
fredx181
Posts: 4448
Joined: Wed 11 Dec 2013, 12:37
Location: holland

#55 Post by fredx181 »

fabrice_035 wrote:
fredx181 wrote: That works, but then the maximum brightness to adjust is only 0.90
Change BrMax=9 :wink:
I did just copy your code as is, so with the BrMax=9, but that value is not full brightness.
EDIT: I think I see what you mean now, change BrMax=9 to something else probably?
Tried changing to BrMax=10, but gives weird result.

User avatar
greengeek
Posts: 5789
Joined: Tue 20 Jul 2010, 09:34
Location: Republic of Novo Zelande

#56 Post by greengeek »

MochiMoppel wrote:Which JWM version do you use?

Code: Select all

# jwm -v
JWM vgit-895 by Joe Wingbermuehle
compiled options: confirm fribidi icons jpeg nls png shape svg xft xinerama xpm xrender 
system configuration: /etc/system.jwmrc
# 
also:

Code: Select all

# xrandr
Screen 0: minimum 320 x 200, current 1280 x 800, maximum 8192 x 8192
LVDS1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1280x800       60.0*+
   1024x768       60.0  
   800x600        60.3  
VGA1 disconnected (normal left inverted right x axis y axis)
DVI1 disconnected (normal left inverted right x axis y axis)
# 

User avatar
greengeek
Posts: 5789
Joined: Tue 20 Jul 2010, 09:34
Location: Republic of Novo Zelande

#57 Post by greengeek »

Mike Walsh wrote:For a lot of the older 5-series Pups (570, 560, 571, Raring, Racy, etc.,) I've used a redshift binary of version 1.8 that I sourced from the Slackware repos via pkgs.org. It doesn't seem to need the addition of anything else;
Hi Mike, I would like to try your sct based utility so I installed your ScreenControl-v1.3-i686.pet but have no clue what to do after that.

Can you give me a quick tute that will help me get this running on Slacko 5.6 please?

The pet seems to include sct
- do I need to install redshift?
- how do i start this screen control utility?

Treat me like a numbskull and hold my hand :P

cheers!

User avatar
Mike Walsh
Posts: 6351
Joined: Sat 28 Jun 2014, 12:42
Location: King's Lynn, UK.

#58 Post by Mike Walsh »

greengeek wrote:
Mike Walsh wrote:For a lot of the older 5-series Pups (570, 560, 571, Raring, Racy, etc.,) I've used a redshift binary of version 1.8 that I sourced from the Slackware repos via pkgs.org. It doesn't seem to need the addition of anything else;
Hi Mike, I would like to try your sct based utility so I installed your ScreenControl-v1.3-i686.pet but have no clue what to do after that.

Can you give me a quick tute that will help me get this running on Slacko 5.6 please?

The pet seems to include sct
- do I need to install redshift?
- how do i start this screen control utility?

Treat me like a numbskull and hold my hand :P

cheers!
@ Ian:-

Hah. I had in fact already run you up a 'test' package for Screen Control v1.3 - reference the deleted post at the top of this page. Upon re-reading your previous post more closely, it appeared you didn't want to install either 'sct' or 'yad', and were in fact only interested in Mochi's script. So, I deleted the post as being 'n/a' (not applicable), in order to save on forum bandwidth.....something I feel we all of us (myself included here) tend to take way too much for granted.

---------------------------------

That being said, if you'd like to try it out, we need to ascertain one thing - whether you have YAD installed or not - which is needed for this to function correctly.

I know Slacko 5.6 doesn't come with YAD by default, so I have to assume you do not. If you enter this in the terminal:-

Code: Select all

yad --version
.....it'll soon tell us. If you do, you'll get something similar to the following:-

Code: Select all

0.40.0 (GTK+ 2.24.17)
sh-4.1#
.....otherwise, you'll get 'bash:command not found' returned.

----------------------------------------------------------

The 'trial' package I made up for you contains both 'sct' and 'yad'. This way, if you don't like it, simply uninstall, and they'll both be removed again. If you don't have YAD already on your system, then uninstall the ScreenControl .pet you've already got, and install this one instead:-

ScreenControl-v1.3-i686

Otherwise, continue with the version you do have.

Usage:-

You'll need to re-start 'X', first of all, since this is tray-based. That will place a black/yellow 'split-circle' icon in the tray.

Click on it. The 'Brightness' slider will appear. If you want to adjust this, set this first. I like to set this to around 88-90 for night-time use, but you'll find your own preference. To set the colour temperature with 'sct', click on the 'Colour Temperature' button. A second slider control will show, staggered above and to the left of the first. Adjust this to your personal preference (around 3600-4000 is a good starting point). Then click 'Done', and 'Done' again.

If, after this, you want to re-set the brightness, you'll find that it 'unsets' the 'colour temperature. Just bring the colour temp control up again, and 'nudge' it very slightly up or down.....that will restore it. (I never did figure out how to prevent it from doing this; later, I continued developing this using the redshift-cli script Fred wrote for it, so it kinda got forgotten about.)

Still works well enough, though.


Mike. :wink:

User avatar
MochiMoppel
Posts: 2084
Joined: Wed 26 Jan 2011, 09:06
Location: Japan

#59 Post by MochiMoppel »

@greengeek: With JWM vgit-895 you are on your own. Your distro shipped with -835.
The fixed script below *may* solve your issue as it uses a different window type-hint, reducing the chance that the window manager misinterprets it.

@fabrice_035, fredx181: Many thanks for checking and fixing the script. I made the proposed changes and hope that it now works even for European users.

I also tried to make it consistent with the behavior of the retrovol slider. The retrovol slider keeps the button visible and uses the button as a toggle switch. By removing type-hint="6", which puts a window on top of any other window, even on top of the tray, I can prevent the "no open on empty desktop" bug mentioned in the comments. Interestingly the retrovol slider also shows a different behavior when opened on an empty desktop. The button opens/closes as expected, but the slider also closes when the mouse is removed from the slider (=leave-notify-event). Intended behavior or benign bug?

Unlike retrovol the brightness slider also closes on focus out. Personally I like the behavior of retrovol on an empty desktop but I think it may confuse users. This functionality - if desired - can easily be added to the existing focus-out instruction:

Code: Select all

	<action signal="focus-out-event">exit:</action> 
	<action signal="leave-notify-event">exit:</action> 
The (hopefully working) script now looks like this:

Code: Select all

#!/bin/bash
busybox pkill brightslider && exit
export LANG=C
ALIVE=$(xrandr --verbose | busybox tr "\n" "\x0" | sed '   #replace linefeeds with NULL characters, thus putting the whole output on a single line 
s/\x0[A-Z]/\n&/g      #xrandr output is indented. Only 'Screen' and Monitors appear left aligned, i.e they follow immediately after a linefeed. This command adds a 'real' lf before them 
s/\x0//g' | sed -r '   #remove all NULL characters and pipe to another sed in order to detect newly inserted LFs 
/Brightness/!d         #remove all lines not containing Brightness (leaving only monitors set 'on') 
') 
MON=$(echo "$ALIVE" | awk '{print $1}')		#may produce more than 1 monitor 
if [ $(echo "$MON" | wc -l) -gt 1 ];then	#if more than 1, ask! 
	XLIST= 
	for monitor in $MON ;do 
		XLIST="$XLIST $monitor $monitor off" 
	done 
	MON=$(Xdialog --title "Brightness" --under-mouse --stdout --no-tags --radiolist "Please select monitor" x 4 $XLIST) 
	[ $? != 0 ] && exit 
fi 
BrCur=$(echo  "$ALIVE" | sed -nr "s/$MON.*Brightness[: ]*([0-9.]*).*/\1/p" ) 
BrMax=1 
BrMin=0.1 
echo -n ' 
<window decorated="false" skip_taskbar_hint="true" margin="0" window_position="2"> 
	<vscale range-value="'$BrCur'" range-min="'$BrMin'" range-max="'$BrMax'" range-step="0.05" width-request="28" height-request="200" inverted="true"> 
		<variable>vSLIDER</variable> 
		<action>xrandr --output "'$MON'" --brightness $vSLIDER</action> 
	</vscale> 
	<action signal="focus-out-event">exit:</action> 
</window>'| exec -a brightslider gtkdialog  -s
@Mike Walsh: Sorry for the intrusion into your thread. I tried to respond to a request and didn't realize that such a small script can trigger so many issues. I just don't want to leave a mess :lol:

User avatar
greengeek
Posts: 5789
Joined: Tue 20 Jul 2010, 09:34
Location: Republic of Novo Zelande

#60 Post by greengeek »

MochiMoppel wrote:With JWM vgit-895 you are on your own. Your distro shipped with -835.
The fixed script below *may* solve your issue as it uses a different window type-hint, reducing the chance that the window manager misinterprets it.
Thank you - unfortunately it did not change my symptom so I will need to review the reasons why I changed to jwm 895.

Also - the script does not work the same way my usual method does - the script seems to alter the gamma instead of backlight intensity. This gives an unnatural blue hue at lower intensities. Have I misunderstood what it is intended to do?

Post Reply