Author Archives: Todd Partridge (Gently)
xuserrun is a bash script to run a command on the active X.org server display. This is primarily necessary if from within another environment (different user, console, cron, boot script…). xuserrun gathers DISPLAY and user environmental variables via systemd and passes them on to be able to dothis. xuserrun is designed for use with only a single user X.org server display. Running it is basic:
xuserrun xclock -digital
Tto put out a notification:
xuserrun notify-send "Hello, Dave."
When I first used
ln, I expected the behavior of
ln source link to work. But
ln is slightly more complicated than that. While learning it from the beginning, I discovered it does not always resolve the path correctly; additionally, it doesn’t not error if the source is non-existence. I discovered that this was necessary because
ln is designed to be versatile. So I understood that one would want links at times to be created that don’t exist yet, but it was unhelpful to me in the way that I felt
ln should logically work, and the way that I wanted to use it.
Originally, I would do a link like this and it would be broken:
# ln -s ../dir/file dir/
I’ve attempted other links since then that too (of which I can’t remember now) would also be broken. So the way I discovered to do links correctly without doubt was to use whats called the fully-qualified or absolute path (i.e. a path defined from root [
# ln -s /home/username/Document/file /home/username/Desktop/file
There’s a program called
realpath that does this, so I wrote a wrapper script for it and it turned out to be pretty easy. The script resolves the absolute paths, verifies the existence of the source directory and link parent directory, and detects write permissions prompting sudo when needed. It works like this:
# lnk ~/Documents/Resumes/ ~/Desktop ‘/home/username/Documents/Resumes’ -> ‘/home/username/Desktop/Resumes’
# lnk ~/Documents/Resumes/ ~/Desktop/Resumes-I-like ‘/home/username/Documents/Resumes’ -> ‘/home/username/Desktop/Resumes-I-like’
a specifically named link will be put on the Desktop.
# lnk /etc/fstab ~ # or use ~/fstab-edit ‘/etc/fstab’ -> ‘/home/todd/fstab’
If trying to link to a write-protected directory:
# lnk /usr/share/vim/vim73/vimrc_example.vim /etc/vimrc [sudo] password for $USER: ‘/usr/share/vim/vim73/vimrc_example.vim’ -> ‘/etc/vimrc’
An error message will appear if the source or link parent directory doesn’t exist:
* The script will work for just about any instance with the exception of removable media where relative-paths would be better used.
I wanted to convert an mp3 file to an mp4 or avi file because I wanted to be able to use it on my PS3 ( the PS3 has a basic audio player that doesn’t save position [ particularly troubling for large audiobooks ] ). This although is good for audio posting on youtube… I found a script by Jeremy Tharp that needed a bit of a tuneup (quoting parameters for file names with spaces, fixed exit status, better detection for the duration) and it works pretty good:
Though it is the expectation that a monitor is ready as soon as it is removed from the box, most monitors need to be calibrated. A much more vivid, detailed, true experience can become available after it is done that can be enjoyed and “feels right”. Calibrating a monitor correctly requires training of the eye so it initially can take a bit of work.
All settings done to calibrate the monitor should be done on a hardware level (except for possibly gamma) as software solutions almost never adjust the image truely. Before beginning, have the monitor on for about ten minutes as it can take the lamp this long to warm up and represent accurate values.
Gamma correction is the adjustment of mid-tone luminosity. It is used to compensate for the non-linear relationship between the input signal and the luminance of a monitor. Televisions, computers, and the internet use a gamma of 2.2 as a standard so monitors set to this to be able to correctly display output. Most monitors default to the 2.2 standard but some monitors deviate and therefore hardware and/or software gamma correction is required. A high gamma will look glowy and a low gamma will appear errie and dark.
There is likely a gamma setting on the monitor if it needs to be adjusted. If there isn’t, or for further adjustment, a software solution is available. The first software solution would be to use the EDID data built-in to the monitor of most modern-day computers. It contains details about the monitor including gamma correction. The Desktop Environment may have the ability to grab the EDID and save it as an ICC profile (GNOME does), otherwise a program like Quickgamma in windows will do. If the monitor does not have EDID information, Quickgamma also has the ability to manually-calibrate the gamma and create an ICC profile from that; it saves the ICC profiles to
To load an ICC profile put it in
~/.local/share/icc/ and see if your Desktop Environment supports it. If it does not, a good program that can load them is
In the image, lightly squint the eyes (or step away) to find the match where gamma blends with the background.
Contrast defines the tonality of an image. Tonality is the gradient leveling from light to dark. With a high contrast the light and dark extremes become “crushed” or “blended” together, a low contrast the and images will appear flat. Contrast is also reflects the white-level (the brightness of white) of the monitor; contrast levels are often defined when buying a monitor because they will tell how bright the lamp is.
In this image, turn up the contrast to maximum and the reduce until all whites become distinct and the first block is just barely discernable.
Brightness is better-referred to as black-level as it defines the “brightness of black”, or how bright darkness goes. Black is “black” or will be just above the black of the monitor if turned off. Adjust the image so that the left box just barely discernable. It may be necessary to go back and forth between contrast and brightness until the right balance is met.
For color the first thing to do is adjust saturation. Saturation is the total amount of color the monitor will display. Too much saturation and images will be heavy with color, too little and they will appear faded. On some monitors the setting will be called Color, on others it will be Saturation, and on others it will be controled through an accumulative adjustment of the Red, Green, and Blue channels. Use the images below to determine saturation. Skin tone is a good indicator for this; however, also look at the colors on the color wheel as “bleeding” will at times occur when over-saturation occurs.
To adjust the color balance, also use the images below with skin tone as a reference. Do one color at a time, go back and forth, back and forth, until it feels right. When doing this be careful not to strain the eye too much as eye fatigue effects colorreception. Take a break after a little bit (get up and strech, make lunch…) and come back and you’ll immediately see, “Ah, the image is too red” or “Ah, the image is too blue”… The base colors Red, Green, and Blue also have complementary colors or complmentary light, the opposite of Red is Cyan, Green Magenta, and Blue is Yellow. If an image has too much Magenta it will need more Green. Again look at the skin tone (the gray in the first image works good). This is where the trained eye comes in. With practive eventually color bents will become discernable. Once it is achieved, the discovery of a well defined monitor can be begun to be enjoyed.
What a professional typesetter knows is the importance of a good font. For centuries typesetters have evolved fonts to provide ease of reading that we know today. Having the text look good in the web browser is a nice bonus; choosing the right type and size can make a big difference to how well we read, especially if used quite a bit.
To make a web page feel right — as the designer had in mind — the fonts should be on your system that a page requires. On some Linux systems, only the basic fonts are installed. Installing missing fonts usually adds nice touches that may have not been realized before. To help discover missing fonts, the Context Font add-on will display font type and size of a selected font. Many sites define their fonts as Arial, or sometimes, Verdana, or Georgia; these fonts can be added by installing Microsoft’s core fonts; a few define theirs with Apple fonts, and a few less with others. These font packages contain the most popular fonts (for Arch Linux):
arpa -i otf-bitter otf-exo ttf-bitstream-vera ttf-dejavu ttf-inconsolata ttf-lato ttf-liberation ttf-mac-fonts ttf-opensans ttf-win7-fonts
To get a good idea on good font size to use, look at a book. The size there that feels comfortable will likely feel comfortable on the monitor too. When choosing font size also think about making the various typefaces the same size (i.e. serif, sans-serif, and monospace).
Being able to define one’s own font can help readability quite a bit; however,keep in mind, tastes differ. In Firefox, the settings that can be defined are generic typefaces of: serif, sans-serif, and monospace (additionaly, the minimum font size can be set). It should be known though, that many sites still force a specific font type and size; however, gradually, a greater number of sites are using generic typeface definitions. In the future this means that personalizing fonts will be of greater availability. When choosing a font type, keep in mind to pick one that helps improve readability rather than one that grabs ones attention.
Here is a basic test of what Firefox’s base-defined font types and sizes look like (click to view):
Here are what a few of the common font groups look like (click to view):
What did I choose?
After adding all the new fonts and testing them, I found out I like a varied group; they read beautifully and scale good. Ultimately I came up with these:
|Monospace||DejaVu Sans Mono||12|
DejaVu Sans Mono and Open Sans are good fonts and, for me, hard to beat. Rather than just define them in Firefox, I prefer to define my serif, sans-serif, and monospace fonts system-wide. This allows me to have a consistent overall look to me desktop. Here is my Fontconfig configuration (note: fonts are listed preferential/available first): fonts.conf.
For GNOME the fonts sizes are:
|Window Titles||Cantarell Bold 11|
What they look like:
I use my laptop primarly at home with an external monitor as discrete, meaning that I have the laptop monitor turned off and I only use it. At times this is also called a dedicated monitor. GNOME can be set to disable the laptop monitor and enable the external but it wasn’t able to hotplug the monitor after I returned the laptop, and at times wouldn’t do so after resuming from sleep. Also in the proccess I discovered that the X.org server DPI setting wasn’t being done correctly and that GNOME’s text scaling needed to be adjusted. So I decided to do it in a script and it turned out to be pretty easy.
I wrote the basic script that toggles monitors depending if the external monitor is present, then it detects correct physical size dimension of the screen so the the correct DPI can be set. After this, I added a startup script (.desktop file), a pm-utils script to runafter resuming, and a udev script to detect andset the monitor when plugged in. The udev rule is generic but appears to be working for a lot of people, it relys on Kernel Mode setting (KMS) so doesn’t work for me wiht the catalyst driver, but every thing else works great. I put it on github for any who like to look at it.
The bash script cannot be used right away instead a couple bit will need to be directed:
The package cannot be installed directly and be expected to work, some edits will need to be made. First, in the resume script '80_discretemon' a username will need to be defined; next, the monitor names will need to be defined as created by the driver in 'discretemon'.
Also, the monitors can be defined in
xorg.conf but the fix for after resume from sleep, remains.
Section "Monitor" Identifier "0-LVDS" Option "VendorName" "ATI Proprietary Driver" Option "ModelName" "Acer Aspire Laptop Screen" Option "DPMS" "true" Option "TargetRefresh" "60" Option "Position" "0 0" Option "Rotate" "normal" Option "Disable" "true" DisplaySize 344 194 # only works with xrandr disabled. EndSection Section "Monitor" Identifier "0-DFP1" Option "VendorName" "ATI Proprietary Driver" Option "ModelName" "Samsung SyncMaster SA350" Option "DPMS" "true" Option "PreferredMode" "1920x1080" Option "TargetRefresh" "60" Option "Position" "0 0" Option "Rotate" "normal" Option "Disable" "false" DisplaySize 476 268 # only works with xrandr disabled. Option "DPI" "102 x 102" EndSection
I previously read about (a good number of times) people not having the best experiences with AMD’s proprietary driver. However, with my new laptop I decided that no matter how much I love the open-source driver (bought it because AMD opened the specs to it), that realistically it would take a few years before I’d be able to play games with it. The AMD/ATI website says 7xxxM series is supported so I decided to try it.
Prepare for Installing Catalyst
Removed open-source Radeon driver options, commented
Installing Catalyst Driver
Using Vi0l0’s excellent catalyst repository, I added it to
[catalyst] Server = http://catalyst.apocalypsus.net/repo/catalyst/$arch
Add Vi0l0 key:
sudo pacman-key -r NUM sudo pacman-key --lsign-key NUM
Installed (using pacman shortcuts script (pm):
pm y pm i linux-headers catalyst-hook catalyst-utils lib32-catalyst-utils
catalyst-hook here to have the module put into initramfs when kernel versions areupgraded (provides catalyst driver).
sudo aticonfig --initial
Added module to load at boot:
echo '# Load AMD Catalyst driver fglrx' | sudo tee /etc/modules-load.d/fglrx.conf
Disabled Mode Setting: Added
GRUB_CMDLINE_LINUX="nomodeset" (for GRUB2) to
sudo grub-mkconfig -o /boot/grub/grub.cfg
Reboot, and driver loaded properly (
lsmod | grep fglrx), and direct rendering is enabled (
glxinfo | grep direct).
.desktop for ATI Catylyst Control Center:
cp /usr/share/applications/amdcccle.desktop ~/.local/share/applications/ sed -i 's/Exec=amdcccle/Exec=gksudo amdcccle/' ~/.local/share/applications/amdcccle.desktop chmod +x ~/.local/share/applications/amdcccle.desktop
- Color Temperature: Use display’s settings
- Selected down arrow for both monitors to change to correct settings.
Logout/Login: Gnome 3 crash, extensions disabled
Login: Monitor settings lost, both on lower resolution (open-source radeon driver and catalyst define monitors differently so Gnome using xrandr flubs the first time after.
- Pixel Format: RGB 4:4:4 (Full RGB)
- Adjustments: Overscan 0%
Catalyst driver does not recognize discrete GPU properly, thinks integrated GPU is discrete GPU:
aticonfig --list-adapters * 0. 00:01.0 AMD Radeon HD 6520G # * Default 1. 01:00.0 AMD Radeon HD 7600M Series
aticonfig --px-list PowerXpress: Discrete GPU is active (High-Performance mode).
I tried using
sudo aticonfig --px-igpu to switch to integrated to see if it would switch but got an X.org server hang. Also tried
sudo aticonfig --px-dgpu to see if
aticonfig --px-list was in error but no luck. Tried using discrete GPU BusID (
BusID "PCI:1:0:0") in
xorg.conf but that didn’t work either. The catalyst driver doesn’t properly recognize the 7670M GPU as discrete GPU. Entered bug.
When I first started with GNOME mouse clicks would miss at times and sometimes keypresses did too, I added
export CLUTTER_VBLANK=none to
~/.bash_profile and it fixed this. Oddly, I commented it later because I thought it might be related to another bug (it was not) and forgot to enable it again, but I haven’t seen the problem since.
Hard to believe there is not official AMD Catalyst bugzilla (odd how their website points to the unofficial one) so I’m a bit worried about the near future but think all will be fine.
The driver works good. I’m getting a consistent 50fps on Urban Terror and tried Doom and it looks pretty good. Disappointed about not being able to use the discrete GPU, would have been nice. Gonna keep using catalyst, its working good.
Here’s a script i built called
gpuswitch I plan to use when gaming later. Night.
rsync is a command-line tool used to copy/clone files (“fast incremental file transfer“). It is a great, simple backup tool. The basic
rsync command is this:
rsync -a src dest_dir
src is the original directory or file and
dest_dir is the destination directory. Because
rsync does incremental backups it only adds the file to the
dest if it has been updated from the original backup.
rsync -axS src dest_dir
This is the command I use. This command can be used to backup just about anything! The options:
-ameans archive mode which basically means to preserve the file “as is” (same permissions…)
-xmeans not to cross file systems boundaries
-Smeans to handle sparse files efficiently
-voption (verbose) can be used to print what
An important note about rsync: when
src is a directory a trailing slash (
rsync to copy the “contents” of the directory:
rsync -axS src_dir/ dest_dir ls -1 dest_dir/ file1 file2
Without a trailing slash:
rsync -axS src_dir dest_dir ls -1 dest_dir src_dir
rsync can also use file-lists containing paths of directories and files, to both include and exclude them for backup:
sudo rsync -axS --files-from="incl_file.txt" --exclude-from="excl_file.txt" src_dir dst_dir
src_dir will have to be specified and will have to be relative to paths in the file list:
cat incl_file.txt Desktop/ rsync -axS --files-from="incl_file.txt" --exclude-from="excl_file.txt" /home/user/ dst_dir
rsync can also remove files from the
dest_dir with the
--delete option, so files that get added to the exclude file or taken out of the include file will removed from
rsync -axS --delete-excluded --files-from="incl_file.txt" --exclude-from="excl_file.txt" /home/user/ dst_dir
rsync to backup my system configurations and
/home/ to make reinstalling easy. I created the script to remember the command to use, but to also easily add to the include and exclude files:
bcksysc i /etc/hostname Added "/etc/hostname" to bcksysc-inc.txt include file.
bcksysc bcksysc - backup configurations i - add to the include list a file or folder e - add to the exclude list a file or folder c - create backup
Here’s the script all that needs to be done is to change the Parent Destination Directory (for backing up
/home/ I copied the script to
bckhome, changed the
home and added
/home/ to the include file):
So my destination directory looks like this:
ls -1 /run/media/todd/Backup/rsync/ ... aspire_2012-08-31_sysc aspire_2012-08-31_home
I got to test out a good number of screencasting applications and I found a good one, and as usual the easiest was the best. I started with recordMyDesktop.
recordMyDesktop is a basic program that works good. The GTK version has a simple UI that sets a border around the area to be recorded. I has sound recording too.
A minor thing but of note is that the window detection area is off when selecting a windows, but the reason I didn’t use recordMyDesktop was because I found the quality wasn’t that good. It could be because it uses
.ogv format, or perhaps it had something to do with my system.
This is and example I did with recordMyDesktop and though it’s enlarged (OpenShot doesn’t have the ability to use the original size) the quality I wanted to be better.
I tried Istanbul and a couple others all with about the same recording results. Istanbul hasn’t been developed in several years and though I got excited about xvidcap it hasn’t been developed in years either. xvidcap grabs screenshots and then concatenates them into a video. I got excited because xvidcap’s preview uses Imagemagick’s
animate tool to preview the video and it was real nice. Unfortunately very little works in xvidcap anymore but taking the screenshots. To put them together I used:
fmpeg -i out%04d.xwd -r 15 -vcodec huffyuv test.avi
unfortunately the quality was no better than that of the others.
The great command line tool to encode and decode video
ffmpeg can also do screencasts and I read a lot of how people liked it (and I do too). To use it it’s real basic:
ffmpeg -f x11grab -s wxga -i :0.0 -sameq screencast.mpg
The quality isn’t quite what I want it to be, but I’ve seen other people have nice looking screencasts so I think it must be either my video card or my video driver.
This line can be amended some for better quality, performance, and add sound recording. Using the raw, lossless codecs for video and audio improves processor usage for better FPS recording:
ffmpeg -f x11grab -s wxga -i :0.0 -vcodec huffyuv -sameq -acodec pcm_s16le -f alsa -i pulse -ac 2 screencast.avi
-iare for size and input.
-swill give the dimensions and
-iwill define the co-ordinates.
wxgais a definition of a video resolution standard (available ones are listed in
-rcan be added to define the frame rate. Default is 25 and is good. Only reason really to change it is if frames are dropped during recording (marked with red).
-follow_mouse 100can be added to follow mouse movements.
100is the border in pixels that must be reached before the area is moved.
ffcast and FFmpeg
ffcast is a program that grabs and passes X.org server dimensions and co-rodinates to other programs. It has built-in support to pass these parameters for some programs including
ffmpeg. So the command will now look like this:
ffcast -s ffmpeg -- -vcodec huffyuv -sameq -acodec pcm_s16le -f alsa -i pulse -ac 2 screencast.avi
-s option will prompt for the screen area and then pass the dimensions and co-orodinates to
Now to make this easy, I put this in a bash script, it runs as such:
screencast <a|f|m|w> - create screencasts (a)rea (f)ull-screen (m)ouse (w)indow
Here’s the bash script:
I love MPlayer. I’ve been using it for years. Whenever I needed to watch a video from my camera or downloaded something from YouTube it always did great. However, I revisited recently trying to play a DVD with MPlayer after having gone through a lengthy setup process a ways back and discovered MPlayer still cannot play DVD’s reliably. From the examples I tried it seemed as error-prone as before.
MPlayer always ran dependably and with almost no resources, videos would pop rightup. Learning to use the keyboard to navigate Mplayer was likely having one big remote control. However, I came to the decision that I cannot deal with the quirks of MPlayer anymore (there is good work on the mplayer2 project that is trying to fix a lot of the internal plumbing problems of MPlayer) but I needed something more-reliable. So when I decided just to use VLC, I accidentally learned about
I don’t normally use VLC because I use GNOME. Having MPlayer open up immediately was a big plus, but with
clvc (which is part of the VLC package) videos open just like they did with MPlayer. And the playback quality is good. To play a DVD:
The big thing is I’m going to have to learn all the key mappings again for
cvlc, so a made a reference sheet:
clvc be recognized by the desktop a
.desktop needs to be created:
and put in
sudo update-desktop-database -q
To have all known video types that VLC knows and define them to cVLC as the default application do:
xdg-mime default cvlc.desktop $(grep -oP 'video.*?;' /usr/share/applications/vlc.desktop | tr ';\n' ' ')
Load on DVD Insertion
I have yet to find out how to do this. This probably isn’t the correct way to do it, but it should work (note: my install is busted a bit right now so unable to test). Put in
and then point to it in Removable Media > DVD.
VLC has it’s own parser to be able to extract URL’s from YouTube so running is all that is needed to get the job done:
I tend to use my desktop as my workspace so I like wallpapers that act as more of a background decoration rather than elaborate artwork. So I created this. This is based on a wallpaper I found on the net (sorry, can’t remember where) and I re-did it. The original was in jpeg format and it had a bit of dithering to it.
It’s real basic, just 140×140, but I tile it and it comes out real nice:
It’s a vector image so it’s able to be resized real easy if need be.