There are computer displays out there without any OSD buttons. No, really. I have one of those. So how do you say turn the brightness up? No problem, u have a software with buttons and sliders to control every aspect of you computer display. Collection of protocols to make such application is called Display Data Channel(DDC). On Linux PC you really have only one option, Ddccontrol application and its GUI variant named Gddcontrol...
Just to mention that this ddccontrol isn't maintained since 2006 or so. Very unfortunate situation, but for now it works just fine but only with root privileges.
Drawback to this approach is that you loose gddccontrol panel applet because applets are not started as root. Lets remedy this situation. Gddccontrol can talk to your graphics adapter in two ways. First way is directly and you need to be root to do that. Second more attractive way is trough i2c-dev kernel module. Now you see where this is going, huh? We will install this kernel module from repositories, and make Gddcontrol work as non-root user.
First things first, lets install gddccontrol and i2c-dev kernel module:
sudo apt-get install gddccontrol i2c-tools
Now we must add ourselves to the "i2c" user group by issuing this command:
sudo adduser $USER i2c
Next thing is to add i2c-kernel module to be run at bootup:
sudo /bin/sh -c 'echo i2c-dev >> /etc/modules'
Now restart your PC. After it boots, you can run Gddcontrol without being root (without gksu), and you can add Gddcontrol applet to your panel. Default Gddcontrol launcher uses gksu to launch Gddcontrol with root privileges. You should change this launcher by removing gksu from the launch command field in menu editor (right click to Applications and choose Edit Menus, then select Preferences -> Monitor Settings and click Properties on the right side of this dialog).
Please report here if something i wrote doesn't work. I'll try to resolve your problem to the best of my abilities.
It says the monitor is not supported. error is
LANG= LC_ALL= ddccontrol -p -c -d
I have a sony LCD 1280×800 and ubuntu 11
The problem is that ddccontrol hasn’t been actively developed for some time now so support isn’t automatically available for newer monitors. Also your monitor should support DDC/CI, from your resolution it looks like you are running it on laptop. Not all laptops use DDC/CI so you can’t use ddccontrol with them, you have brightness applet in Gnome2 and probably something similar on Unity to control brightness. Also you have Fn+shortcut on your laptop keyboard.
I guess you’re right about DDC. It applies to the Gnome 2 screen controller too.
My Fn keys work fine for brightness and there’s also slider for that under the battery settings. But right after I install Unity, Fn don’t work and the slider disappears.
Since i can’t compromise on screen brightness, i guess i can do without Unity hardware acceleration. Besides Gnome 2 is old, Gnome 3 supports everything, wish it came with Ubuntu bundled. Thanks
happens to me as well with dell n3010 laptop and kubuntu natty 11.04. Now it says that my current monitor doesn’t support DDC/CI..whatever that is. The brightness applet (by pressing fn + F4/F5) just pretends to change brightness but it doesn’t actually change anything 🙂
I’m no laptop design expert but I as I wrote earlier not all laptops use DDC/CI to control display params. Also ddccontrol needs minimal degree of support for display manufacturer to function, and it hasn’t received new version for 5 years and that alone is enough no to support all laptop PCs. ddccontrol is fine utility but it desperately needs update to support newer hardware.
thanks for this post, exactly what I need. However, it doesn’t work for me. 🙁
System: Debian squeeze desktop, nVidia GeForce 6600 GT, EIZO FS2332.
When I run g/ddccontrol as root, it works fine, albeit only with the VESA configuration. But brightness, contrast, RGB gain, volume work well. But it doesn’t work as user, following your instructions.
I have installed libi2c-dev, added myself to i2c and made sure the i2c-dev module is loaded. But I get the error Probing for available monitors
nvidia_open: cannot open /dev/mem: Permission denied
Since the error is about /dev/mem which is owned by the kmem group, I added myself to that one, too. However, no success.
A workaround for ddccontrol is to make it suid, but that’s of course suboptimal, and doesn’t enable gddccontrol. Making gddccontrol suid doesn’t work, because then Gtk+ refuses to run.
If you have any idea what else to try, that’d be great!
Ravi: That line is not exactly an error message, it just says that ddccontrol doesn’t have a profile tailored for your monitor. If it works with the VESA profile, a way to avoid that message is to symlink the expected profile name (for me that’s ENC2263.xml – no idea why) to VESA.xml in /usr/share/ddccontrol-db/monitor
now when I think about it I remember this working on Debian. Now I also remember that Debian doesn’t provide udev rules for i2c devices with libi2c-dev like Ubuntu. You will find udev rules inside i2c-tools package http://packages.debian.org/squeeze/i386/i2c-tools/filelist. Inside that package there is /lib/udev/rules.d/60-i2c-tools.rules file with:
KERNEL==”i2c-[0-9]*”, GROUP=”i2c”, MODE=”0660″
what is telling kernel to allow i2c access from user mode to users from i2c group. Basically all procedure is same for Debian, but you need i2c-tools package installed. You will need to restart your Debian after installing i2c-tools package. It would also be great if you could report back so I could update this article, thanks 😉
p.s. If someone using Fedora, CentOS or RHEL ever comes here, you must create this udev file manually and then all from this article will apply.
Ok, now this is weird. I wanted to reply that I already had i2c-tools installed, which I had. But then I just tried it again – and now gddccontrol works. Even though I didn’t change anything else. I still get that error message from ddccontrol about /dev/mem, if I run it with -p as user, but it doesn’t seem to be a problem because the i2c access works.
No problem. I’m glad you got it working, I’ve updated article yesterday. If I understand correctly ddccontrol can get to your hardware trough pci bus (only root users) or trough i2c-dev kernel module. When you run it as regular user it tries to access your hardware both ways and first (pci buss access) fails hence the error about /dev/mem. Basically that error tells it that pci access isn’t possible and to to go i2c-dev way.
Thanks for your work with DDCcontrol.
I install it without problem, but when I launch it says:
“No monitor supporting DDC/CI avalilable.
If your graphics card need it, please check all the requires kernel modules are loaded (i2c-cev, and your framebuffer driver).”
But I don’t know how to do it…
The monitor is a samsung SyncMaster 193P, that I read is supported. Conected with DVI cable.
Xubuntu 12.04 updated. Intel i3 third generation with integrated graphics.
Could you help me?
If ddccontrol did not work for you, consider using ddctool. In contrast to ddccontrol it seems to be under active development.