View previous topic :: View next topic |
Author |
Message |
JuNix Apprentice
Joined: 05 Mar 2003 Posts: 224 Location: Sheffield
|
Posted: Thu Sep 25, 2003 10:36 am Post subject: Reduce Eye Strain - Optimising X |
|
|
DISCLAIMER: You may damage your monitor if you ask it to display at a refresh rate which is out of it's supported range. You have been warned.
I work in an office full of people using various Linux distributions. The number of people who are using X with unoptimised vertical refresh rates amazes me. So many people are staring at a screen all day long which is refreshing at 60Hz when with a bit of work they could configure their system to refresh at a much higher rate.
In general, the higher refresh rate you can get, the less eye strain it will give you.
1. Find out your current refresh rate.
There are various ways of doing this. Most modern monitors will tell you on the OSD (On Screen Display) if you go into the monitor's menu system. If your monitor does not have this feature, you may find out by running xvidtune from the command line
At the bottom right of the xvidtune dialog, it will tell you the vertical refresh rate in Hz.
If your vertical refresh rate is less than 70Hz, you could probably do with optimising your X configuration. This will involve you manually editing your X configuration file. This is less scary that it sounds, if you've never done it before. When I optimised my refresh rate, I got it from 75Hz up to 88Hz. The image is so much crisper and clearer and I recommend doing this.
2. Find out the specifications of your monitor.
Indeed, your monitor may already be running as high as it can go. You need the exact model number and manufacturer of your monitor. The model number is invariably found at the back of your monitor somewhere. You may have a manual for the monitor which tells you the specifications. You are looking for the the horizontal frequency range in KHz, and the vertical frequency range in Hz. Remember, "Google is your Friend" (tm), so a search string of "[manufacturer] [model number] refresh" will probably yield the results you need.
Look at the monitor specifications that you find. Look at your desired resolution and find out the maximum vertical refresh rate your monitor supports.
3. Back up your existing X configuration file
It's easy to break things, so have a copy of your old config before you mess with it.
Code: |
cp /etc/X11/XF86Config /etc/X11/XF86Config.thisworks
|
4. Calculate your Modeline
Visit http://xtiming.sourceforge.net/cgi-bin/xtiming.pl and enter in your monitor specifications. Attempt to push the vertical refresh rate as high as your monitor will go for your desired resolution. If you do it correctly, it will give you a Modeline. Copy that into your X buffer for later use. It may take a couple of attempts to configure it so that your monitor does not attempt to sync too high and switch itself off.
Now, most monitors go into standby whenever they are asked to attempt to sync at a refresh rate that is too high. However, some monitors will stupidly still attempt to display an image. The symptoms are a scrambled display and a high pitched whistling sound. If this happens, immediately switch to a text mode console (CTRL-ALT-F1), or power your monitor off, otherwise your monitor may be damaged.
5. Configure your Monitor
Edit /etc/X11/XF86Config and find the section titled Section "Monitor". Now change the entire section, use your common sense. Mine reads like this and notice that I have put my custom Modeline that I got from the X Timing website in.
Code: |
Section "Monitor"
Identifier "Belinea"
HorizSync 30-86
VertRefresh 50-150
Option "DPMS"
Modeline "1152x864@88" 135.02 1152 1184 1696 1700 864 868 880 900
EndSection
|
An interesting bit is the Option "DPMS". This is the bit that allows your the X server to put your monitor into standby if you don't use your system in a while. If this is not already in, put it in! The HorizSync and VertRefresh are the ranges you found earlier. The Modeline describes to the X server the frequencies and timings and the resolution of your custom made video mode. The name of the mode I have defined in the example is "1152x864@88" which is a unique identifier describing my preferred resolution at 88Hz (this is nice, clear and crisp). The Identifier you can change to describe your monitor (mine is a Belinea!)
6. Configure your Resolution and Refresh Rate
Still editing your XF86Config file...
Go to Section "Screen". If you changed the name of your Monitor earlier, ensure that your change is reflected here. Now find out how many bitplanes you are running in. In the config file, this is called the DefaultDepth. This is usually a value, maybe 8, 16 or 24. There are SubSections referrring to your Depth as well. For example
Code: |
Section "Screen"
Identifier "Screen 1"
Device "Matrox Millennium G200 8MB"
Monitor "Belinea"
DefaultDepth 16
Subsection "Display"
Depth 16
Modes "1152x864@88"
ViewPort 0 0
EndSubsection
EndSection
|
In this section you can see I have manually specified the Monitor I defined earlier in section 5 of this tutorial. My DefaultDepth is 16 (which gives me 64K colours). Now notice that in my Modes, I have manually specified my custom screen mode, which I found by visiting the X Timings web site in step 4. Notice also that I have removed the Subsections that describe other colour depths, although I only did that to make the example clearer. Importantly, in my Modes, I have removed references to resolutions that I will never use. Save your changes to the XF86Config file.
7. Restart X
At this stage, you should restart X. This involves more than just logging out! If there is not a menu option on your display manager to restart the X server, you may do so from the command line (/etc/init.d/xdm restart) or more quickly by using CTRL-ALT-Backspace.
Hopefully your screen will now display a nice crisp image at an optimum refresh rate. Obviously if you have gone too far with your refresh rates, you'll have to switch to a text console and look at backing out your change. If this happens, revisit the X timings web site and try with a lower vert refresh rate.
8. Optimising your Display
Well now you've got a nice higher refresh rate. Well done! It may not be very central on your screen though. Verify your vertical refresh rate by using the "xvidtune" utility again. Whilst in here, you could also move the image around, resize it etc. The "Show" button in xvidtune prints the new Modeline for any changes you make, if you care to make it permanent, you could modify your current Modeline (in /etc/X11/XF86Config) to reflect your changes (remember to restart X)
Or alternatively, you could muck around with your monitor controls to centralise your image. Whatever, I hope this has worked for you, and that your eye strain has been reduced.
9. It didn't work - how to restore your original config
It is entirely possible to get into nightmares with your X configuration. If you need to revert to your configuration before you started messing, you should
Code: |
cp /etc/X11/XF86Config.thisworks /etc/X11/XF86Config
|
and restart X.
If you can't get it to work at all, I do recommend the Scitech SNAP graphics drivers. Take a look at these, at http://www.scitechsoft.com/
These drivers perform quite well, and the installation procedure automatically configures your X server to display at the optimum refresh rate. It even offers a utlity to change your refresh rates on the fly, and this auto-configures your XF86Config file for you. These drivers run on a 21 day evaluation period, so take a look at them. |
|
Back to top |
|
|
Elm0 Apprentice
Joined: 24 Nov 2002 Posts: 281 Location: UK
|
Posted: Thu Sep 25, 2003 6:52 pm Post subject: |
|
|
Nice guide thanks. Didn't know about the Option "DPMS" setting at all! |
|
Back to top |
|
|
MrStaticVoid Tux's lil' helper
Joined: 25 Jul 2003 Posts: 114 Location: Maryland
|
Posted: Fri Sep 26, 2003 12:15 am Post subject: |
|
|
Well this does not work one bit. My montior remains at 60 Hz, even though I should be able to get it to 69 Hz.
The relevent sections of my XF86Config are as follows:
Code: | Section "Monitor"
Identifier "Kleer K7"
HorizSync 30-70
VertRefresh 50-120
Option "DPMS"
Modeline "1280x960@69" 127.23 1280 1312 1792 1824 960 979 990 1009
EndSection
Section "Device"
Identifier "nVidia GeForce2 MX 400"
Driver "nvidia"
EndSection
Section "Screen"
Identifier "Screen"
Device "nVidia GeForce2 MX 400"
Monitor "Kleer K7"
DefaultDepth 24
Subsection "Display"
Depth 24
Modes "1280x960@69"
ViewPort 0 0
EndSubsection
EndSection | The logs say that it probes the monitor for video modes and rates, and then uses the rate from the probe. What is up with that? |
|
Back to top |
|
|
ranmakun Guru
Joined: 06 Nov 2002 Posts: 372 Location: Buenos Aires - Argentina
|
Posted: Fri Sep 26, 2003 2:59 am Post subject: |
|
|
Mr. Static Void wrote: | Well this does not work one bit. My montior remains at 60 Hz, even though I should be able to get it to 69 Hz.
|
I've had some problems in the past with modelines calculated with that page, I used this page:
http://koala.ilog.fr/cgi-bin/nph-colas-modelines
That gave me much better results.
Last edited by ranmakun on Fri Sep 26, 2003 4:00 am; edited 1 time in total |
|
Back to top |
|
|
MrStaticVoid Tux's lil' helper
Joined: 25 Jul 2003 Posts: 114 Location: Maryland
|
Posted: Fri Sep 26, 2003 3:10 am Post subject: |
|
|
That worked great...I love my new refresh rate. |
|
Back to top |
|
|
Onion Avenger Apprentice
Joined: 23 Apr 2003 Posts: 164 Location: New England
|
Posted: Fri Sep 26, 2003 7:35 am Post subject: |
|
|
I guess 1152x864@75 is the best I can get out of my monitor, but I was curious if I could squeeze any more.
In my XF86Config:
Code: | Section "Monitor"
Identifier "monitor"
Option "DPMS"
HorizSync 31.5 - 64.3
VertRefresh 50-90
EndSection |
So I looked up my monitor (some oldish KDS monitor) and it said to use a VertRefresh from 50-100. So I did, and now my monitor can't do 1152x864 anymore! It goes to the next in my list, which is 1024x768. So I change back to 50-90 and everything's back to normal....
Curious. Why does this happen? It seems like because I specify a greater valid range of refresh rates, it should allow it.
Thoughts?
Thanks in advance,
--Richie, the Onion Avenger |
|
Back to top |
|
|
JuNix Apprentice
Joined: 05 Mar 2003 Posts: 224 Location: Sheffield
|
Posted: Sat Sep 27, 2003 1:48 am Post subject: |
|
|
Onion Avenger wrote: | my monitor can't do 1152x864 anymore! It goes to the next in my list, which is 1024x768. So I change back to 50-90 and everything's back to normal....
Curious. Why does this happen? It seems like because I specify a greater valid range of refresh rates, it should allow it.
|
Sorry it doesn't work for you.. X can be a bitch sometimes. X queries the monitor for it's capabilities and if it thinks that the mode you want is out of it's frequency range it skips it.
For more hints to why it didn't work, read your /var/log/XFree86.0.log file. |
|
Back to top |
|
|
revertex_dot_net n00b
Joined: 14 Jul 2003 Posts: 39
|
Posted: Mon Sep 29, 2003 6:35 pm Post subject: |
|
|
another interesting thing is set your monitor screen size (DisplaySize) in milimeters in the section titled "Section "Monitor"".
its sets the screen perfectly centered and fits whole screen.
here follows the monitor section of my "XF86Config", optimized to my crappy 17" crt monitor, which some luck you can find this info about your monitor
Code: |
#********************************************************************
Section "Monitor"
#********************************************************************
DisplaySize 330 250 # mm
Identifier "LG StudioWorks 775N"
VendorName "LG"
ModelName "StudioWorks 775N"
#....................................................................
Option "CalcAlgorithm" "CheckDesktopGeometry"
Option "DPMS"
# UseModes "Modes0"
HorizSync 30-70
VertRefresh 50-160
#....................................................................
# ModeLine "1152x864/75Hz" 110 1152 1240 1324 1552 864 864 876 908 #kde line
EndSection
#********************************************************************
|
|
|
Back to top |
|
|
revertex_dot_net n00b
Joined: 14 Jul 2003 Posts: 39
|
Posted: Mon Sep 29, 2003 6:36 pm Post subject: |
|
|
another interesting thing is set your monitor screen size (DisplaySize) in milimeters in the section titled "Section "Monitor"".
its sets the screen perfectly centered and fits whole screen.
here follows the monitor section of my "XF86Config", optimized to my crappy 17" crt monitor, which some luck you can find this info about your monitor
Code: |
#********************************************************************
Section "Monitor"
#********************************************************************
DisplaySize 330 250 # mm
Identifier "LG StudioWorks 775N"
VendorName "LG"
ModelName "StudioWorks 775N"
#....................................................................
Option "CalcAlgorithm" "CheckDesktopGeometry"
Option "DPMS"
# UseModes "Modes0"
HorizSync 30-70
VertRefresh 50-160
#....................................................................
# ModeLine "1152x864/75Hz" 110 1152 1240 1324 1552 864 864 876 908 #kde line
EndSection
#********************************************************************
|
|
|
Back to top |
|
|
revertex_dot_net n00b
Joined: 14 Jul 2003 Posts: 39
|
Posted: Mon Sep 29, 2003 6:39 pm Post subject: |
|
|
another interesting thing is set your monitor screen size (DisplaySize) in milimeters in the section titled "Section "Monitor"".
its sets the screen perfectly centered and fits whole screen.
here follows the monitor section of my "XF86Config", optimized to my crappy 17" crt monitor, which some luck you can find this info about your monitor
Code: |
#********************************************************************
Section "Monitor"
#********************************************************************
DisplaySize 330 250 # mm
Identifier "LG StudioWorks 775N"
VendorName "LG"
ModelName "StudioWorks 775N"
#....................................................................
Option "CalcAlgorithm" "CheckDesktopGeometry"
Option "DPMS"
# UseModes "Modes0"
HorizSync 30-70
VertRefresh 50-160
#....................................................................
# ModeLine "1152x864/75Hz" 110 1152 1240 1324 1552 864 864 876 908 #kde line
EndSection
#********************************************************************
|
|
|
Back to top |
|
|
revertex_dot_net n00b
Joined: 14 Jul 2003 Posts: 39
|
Posted: Mon Sep 29, 2003 6:39 pm Post subject: |
|
|
another interesting thing is set your monitor screen size (DisplaySize) in milimeters in the section titled "Section "Monitor"".
its sets the screen perfectly centered and fits whole screen.
here follows the monitor section of my "XF86Config", optimized to my crappy 17" crt monitor, which some luck you can find this info about your monitor
Code: |
#********************************************************************
Section "Monitor"
#********************************************************************
DisplaySize 330 250 # mm
Identifier "LG StudioWorks 775N"
VendorName "LG"
ModelName "StudioWorks 775N"
#....................................................................
Option "CalcAlgorithm" "CheckDesktopGeometry"
Option "DPMS"
# UseModes "Modes0"
HorizSync 30-70
VertRefresh 50-160
#....................................................................
# ModeLine "1152x864/75Hz" 110 1152 1240 1324 1552 864 864 876 908 #kde line
EndSection
#********************************************************************
|
|
|
Back to top |
|
|
revertex_dot_net n00b
Joined: 14 Jul 2003 Posts: 39
|
Posted: Mon Sep 29, 2003 6:41 pm Post subject: |
|
|
another interesting thing is set your monitor screen size (DisplaySize) in milimeters in the section titled "Section "Monitor"".
its sets the screen perfectly centered and fits whole screen.
here follows the monitor section of my "XF86Config", optimized to my crappy 17" crt monitor, which some luck you can find this info about your monitor
Code: |
#********************************************************************
Section "Monitor"
#********************************************************************
DisplaySize 330 250 # mm
Identifier "LG StudioWorks 775N"
VendorName "LG"
ModelName "StudioWorks 775N"
#....................................................................
Option "CalcAlgorithm" "CheckDesktopGeometry"
Option "DPMS"
# UseModes "Modes0"
HorizSync 30-70
VertRefresh 50-160
#....................................................................
# ModeLine "1152x864/75Hz" 110 1152 1240 1324 1552 864 864 876 908 #kde line
EndSection
#********************************************************************
|
|
|
Back to top |
|
|
revertex_dot_net n00b
Joined: 14 Jul 2003 Posts: 39
|
Posted: Mon Sep 29, 2003 6:43 pm Post subject: |
|
|
another interesting thing is set your monitor screen size (DisplaySize) in milimeters in the section titled "Section "Monitor"".
its sets the screen perfectly centered and fits whole screen.
here follows the monitor section of my "XF86Config", optimized to my crappy 17" crt monitor, which some luck you can find this info about your monitor
Code: |
#********************************************************************
Section "Monitor"
#********************************************************************
DisplaySize 330 250 # mm
Identifier "LG StudioWorks 775N"
VendorName "LG"
ModelName "StudioWorks 775N"
#....................................................................
Option "CalcAlgorithm" "CheckDesktopGeometry"
Option "DPMS"
# UseModes "Modes0"
HorizSync 30-70
VertRefresh 50-160
#....................................................................
# ModeLine "1152x864/75Hz" 110 1152 1240 1324 1552 864 864 876 908 #kde line
EndSection
#********************************************************************
|
|
|
Back to top |
|
|
Phreakazoid_ Tux's lil' helper
Joined: 11 Feb 2003 Posts: 76 Location: Sydney, Australia
|
Posted: Thu Oct 02, 2003 8:24 am Post subject: |
|
|
I've always found that the auto-detection selects the best refresh rate for me.
That is:
Gets everything right for me, except for the resolution I want to use (it gets the highest supported by the monitor, which doesn't look all that flash). But just edit the Screen section with
Code: | Modes "1024x768" "800x600" "640x480" |
or similar, in each Display subsection.
*shrug* |
|
Back to top |
|
|
hatem n00b
Joined: 05 Jun 2003 Posts: 72 Location: Florida
|
Posted: Sun Oct 05, 2003 9:18 pm Post subject: |
|
|
Hmm... No matter what I do, it skips the first resolution under "Modes" (the one that I calculated the modeline for) and goes to the next one in the list (and runs at 60hz instead of 85hz [which is the reccomended refresh rate for my monitor]).
Here are the relevent parts of my XF86Config:
Code: |
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
HorizSync 31.5 - 70.0
VertRefresh 50-100
Option "DPMS"
Modeline "1280x1024@85" 188.40 1280 1312 2024 2056 1024 1043 1057 1076
EndSection
|
Code: |
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1280x1024@85" "1280x1024" "1280x960" "1152x864" "1024x768" "800x600"
EndSubSection
EndSection
|
If it helps, I'm using a Samsung SyncMaster 753DF 17" monitor. Thanks in advance for any suggestions. |
|
Back to top |
|
|
ranmakun Guru
Joined: 06 Nov 2002 Posts: 372 Location: Buenos Aires - Argentina
|
Posted: Mon Oct 06, 2003 1:12 am Post subject: |
|
|
Are you sure that the modeline is ok?, what happens if you only have the mode you want in your screen section?
Code: |
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1280x1024@85"
EndSubSection
EndSection
|
|
|
Back to top |
|
|
hatem n00b
Joined: 05 Jun 2003 Posts: 72 Location: Florida
|
Posted: Mon Oct 06, 2003 1:48 am Post subject: |
|
|
Yes, the modeline seems to be the problem. If I comment out all the other modes, X doesn't start.
It says something like:
Quote: | Screen(s) found but no usable configuration. |
I generated the modeline using the website above. Maybe I put the wrong information in? I'll try again and see if I get a different modeline. |
|
Back to top |
|
|
hatem n00b
Joined: 05 Jun 2003 Posts: 72 Location: Florida
|
Posted: Mon Oct 06, 2003 1:59 am Post subject: |
|
|
Hmm... I tried a modeline from the site that ranmakun suggested ( http://koala.ilog.fr/cgi-bin/nph-colas-modelines ) but it still wouldn't work.
Here is the new modeline:
Code: |
ModeLine "1280x1024" 156.28 1280 1336 1616 1728 1024 1026 1038 1064 #85Hz
|
What am I doing wrong? Thanks in advance. |
|
Back to top |
|
|
MrStaticVoid Tux's lil' helper
Joined: 25 Jul 2003 Posts: 114 Location: Maryland
|
Posted: Mon Oct 06, 2003 5:04 pm Post subject: |
|
|
Did you change your Modes line to include "1280x1024" instead of "1280x1024@85"? |
|
Back to top |
|
|
hatem n00b
Joined: 05 Jun 2003 Posts: 72 Location: Florida
|
Posted: Mon Oct 06, 2003 7:30 pm Post subject: |
|
|
Yes, I did. Here are the updated parts of my XF86Config:
Code: |
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
HorizSync 31.5 - 70.0
VertRefresh 50-100
Option "DPMS"
ModeLine "1280x1024" 156.28 1280 1336 1616 1728 1024 1026 1038 1064 #85Hz
EndSection
|
Code: |
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1280x1024" #"1280x960" "1152x864" "1024x768" "800x600"
EndSubSection
EndSection
|
Am I doing something wrong? |
|
Back to top |
|
|
ranmakun Guru
Joined: 06 Nov 2002 Posts: 372 Location: Buenos Aires - Argentina
|
Posted: Tue Oct 07, 2003 2:23 am Post subject: |
|
|
That site I suggested tries to "squeeze the most refresh rate at the highest resolution", as it says in the page. Maybe it's too much for your monitor, you could try to make your modeline using the last option in the page, where you can relax the timmings by a given percentage. I've used that and could make modelines for a low end 14" monitor.
If that doesn't work you could also try the page suggested by JuNix.
Also make sure you are entering the correct values for your monitor specs? |
|
Back to top |
|
|
hatem n00b
Joined: 05 Jun 2003 Posts: 72 Location: Florida
|
Posted: Tue Oct 07, 2003 9:12 pm Post subject: |
|
|
I did some searching on google and found a more detailed spec sheet for my monitor ( http://www.samsungusa.com/cmc_upload/product/brochure/753DF.pdf ). It seems that the highest refresh rate it can do when running 1280x1024 is 65hz .
In order to run at 85hz (which is what the manual reccomends) I have to lower the resolution to 1024x768. Didn't think the resolution made a difference. Oh well... Thanks for trying to help out. |
|
Back to top |
|
|
ZothOmmog Apprentice
Joined: 05 May 2003 Posts: 216 Location: Nashville, TN
|
Posted: Wed Oct 22, 2003 2:19 pm Post subject: |
|
|
When I try this, I get a discolored bar across the left edge of my screen, regardless of where I get my modelines.
Any suggestions for getting rid of this? _________________ -It's gonna take a lot of fireworks to clean this place up. |
|
Back to top |
|
|
torchZ06 Apprentice
Joined: 01 Nov 2003 Posts: 175 Location: the front range
|
Posted: Mon Jul 05, 2004 12:31 am Post subject: |
|
|
one thing that helped me was a utility called gtf that's built into X. from what i can tell from google searches, GTF is a VESA standard for cross platform video display where timing params can be calculated from 3 or 4 known values:
http://www.vesa.org/summary/sumgtfv11.htm
http://www.die.net/doc/linux/man/man1/gtf.1.html
here's an example:
Code: | sledgehammer ACPI # gtf 1920 1200 85
# 1920x1200 @ 85.00 Hz (GTF) hsync: 107.10 kHz; pclk: 282.74 MHz
Modeline "1920x1200_85.00" 282.74 1920 2072 2280 2640 1200 1201 1204 1260 -HSync +Vsync
|
see my post here for more info:
https://forums.gentoo.org/viewtopic.php?p=1311543#1311543
FWIW, none of the modelines that i got from either of those two sites worked very well for me, but the ones from the gtf utility were dead on. |
|
Back to top |
|
|
codergeek42 Bodhisattva
Joined: 05 Apr 2004 Posts: 5142 Location: Anaheim, CA (USA)
|
Posted: Mon Jul 05, 2004 1:47 am Post subject: |
|
|
torchZ06 wrote: | one thing that helped me was a utility called gtf that's built into X. from what i can tell from google searches, GTF is a VESA standard for cross platform video display where timing params can be calculated from 3 or 4 known values:
http://www.vesa.org/summary/sumgtfv11.htm
http://www.die.net/doc/linux/man/man1/gtf.1.html
here's an example:
Code: | sledgehammer ACPI # gtf 1920 1200 85
# 1920x1200 @ 85.00 Hz (GTF) hsync: 107.10 kHz; pclk: 282.74 MHz
Modeline "1920x1200_85.00" 282.74 1920 2072 2280 2640 1200 1201 1204 1260 -HSync +Vsync
|
see my post here for more info:
https://forums.gentoo.org/viewtopic.php?p=1311543#1311543
FWIW, none of the modelines that i got from either of those two sites worked very well for me, but the ones from the gtf utility were dead on. | WOW That gtf thing is friggin AWESOME. Than you, torch206! _________________ ~~ Peter: Programmer, Mathematician, STEM & Free Software Advocate, Enlightened Agent, Transhumanist, Fedora contributor
Who am I? :: EFF & FSF |
|
Back to top |
|
|
|