Tuesday, June 2, 2009

Web Access through Proxy Server by Terminal Applications

In many companies/Universities, the web access is granted through Proxy Server (Usually SQUID; hence port 3128).
There are many terminal applications (run on command line interface), which access Internet/Web. For example:
wget (to download file), ftp, lynx/links (to access website), apt/yum (to download and install package). If we are behind
proxy, these applications do not work. The easy solution is to set some shell environment variables, explained below:

For accessing web(lynx/links) using a non-authenticated proxy:
$ export http_proxy="http://proxy.yourcompany.com:3128"

Verify that the setting took place
$ echo $http_proxy
http://proxy.yourcompany.com:3128

For accessing web(lynx/links) using a authenticated proxy:
$ export http_proxy="http://username:password@proxy.yourcompany.com:3128"

If you want the change to be permanent (there each time you open a terminal),
add the export line to .bashrc in your 'home' directory.
$ echo 'export http_proxy="http://proxy.yourcompany.com:3128"'″ >> ~/.bashrc

Secure HTTP (over SSL) access
$ export https_proxy="https://proxy.yourcompany.com:3128"

FTP access
$ export ftp_proxy="ftp://proxy.yourcompany.com:3128"

Sunday, May 31, 2009

Making Soundcard Work in Macbook Pro

After installing Debian 5.0 (Lenny) on Macbook Pro (4,1), I found that
sound card was detected, but there was no sound. Then, I come to know
that, model=mbp3 option must be passed to snd-hda-intel kernel driver, to
make soundcard work. This is content of /etc/modprobe.d/sound file.


$ cat /etc/modprobe.d/sound

options snd slots=snd-hda-intel
# u1Nb.bVcdGDjFCiF:82801H (ICH8 Family) HD Audio Controller
alias snd-card-0 snd-hda-intel
# Add the following line as an option to snd_hda_intel module
options snd_hda_intel model=mbp3

Tuesday, May 26, 2009

Securing Your Root Using GRUB

Generally, we forget to provide password security for GRUB boot loader.

If we do not provide password, any one can get access to root login without giving

root password, just by editing “kernel” parameters to “single” or “1″.

Therefore, you can prevent this editing by providing password.

$ grub-md5-crypt
Password:
Retype password:
$1$BRvj2/$A0Xj.CeywUG/iL6j/15HC.

(you can provide any password, you want. But please remember this by heart)
and paste this output in /boot/grub/menu.lst below timeout
or default as


$vi /boot/grub/menu.lst
...
timeout 10
...
password --md5 $1$BRvj2/$A0Xj.CeywUG/iL6j/15HC
...

Now, reboot and try to modify the kernel parameters. You will not be
able to until you press p and provide the password.

Friday, May 22, 2009

Macbook Pro Touchpad: Synaptics Configuration in xorg.conf

I was trying to use touchpad on Macbook Pro (4,1) in Debian 5.0 (Lenny).
By default, it does not have tapping support, and multitouch support.
Even touchpad driver was also unavailable. Therefore, I had compiled
Linux kernel 2.6.29.3 added support for Apple Macbook Touchpad Driver.
Then after booting in new kernel with NVIDIA 8600 GT driver, I have
modified the xorg.conf with following lines.

## In case, you want to revert
$ sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.bk
$ sudo vi /etc/X11/xorg.conf



...
Section "ServerLayout"
Identifier "Layout0"
...
# Add Synaptics Touchpad as mouse
InputDevice "Synaptics Touchpad" "SendCoreEvents" #"CorePointer"
InputDevice "Mouse0" "CorePointer"
EndSection

...

Section "Module"
...
# Load synaptics driver for Macbook Pro Touchpad
Load "synaptics"
EndSection

...

Section "InputDevice"
Identifier "Synaptics Touchpad"
Driver "synaptics"
Option "SendCoreEvents" "true"
Option "Device" "/dev/mouse0"
Option "Protocol" "auto-dev"
# not using edge scrolling
Option "HorizEdgeScroll" "0"
Option "VertEdgeScroll" "0"

# use two finger scrolling
Option "VertTwoFingerScroll" "1"
Option "HorizTwoFingerScroll" "1" # set to 0 if you don't want horizontal scrolling

# scroll speed, lower is faster
Option "HorizScrollDelta" "15"
Option "VertScrollDelta" "15"

# minimum pressure motion factor
Option "PressureMotionMinZ" "10"

# touch and untouch thresholds, higher numbers if you like to push hard
Option "FingerLow" "20"
Option "FingerHigh" "60" # change to 30 or 40 if you like

# FingerPress (Integer) : Above which counts as press
Option "FingerPress" "130"

# borders based on output from synclient
Option "LeftEdge" "70"
Option "RightEdge" "1120"
Option "TopEdge" "50"
Option "BottomEdge" "750"

# speeds, smaller number for a slower mouse
Option "MinSpeed" "0.8" # 0.5 is very slow, 1.5 is very fast
Option "MaxSpeed" "1.3" # up to 1.5 works ok
Option "AccelFactor" "0.10"

# tap times, change to suit your tapping habits
Option "MaxTapMove" "100"
Option "MaxTapTime" "100"
Option "MaxDoubleTapTime" "200"

# don't change these or two finger tap stops working
Option "TapButton2" "3"
Option "TapButton3" "2"

# must be commented out or normal tapping wont work
#Option "TapButton1" "0"

# Right Top Corner Button as right click
Option "RTCornerButton" "2"
Option "RBCornerButton" "0"

# Left Top Corner Button as middle click
Option "LTCornerButton" "3"
Option "LBCornerButton" "0"

# Palm Detection: Useful while typing
Option "PalmDetect" "on"
Option "PalmMinWidth" "10"
Option "PalmMinZ" "200"

# needed for disabled while typing fix
Option "SHMConfig" "on"
EndSection
...



Sunday, May 10, 2009

Pidgin: Buddy List Window Resize is not Working

I am regular user of Pidgin Multiprotocol Instant Messenger (IM)
for Yahoo! and Gtalk IMs.
The buddy list window was getting wider and wider after several
uses. I tried to resize the window. But I was not able to do so.
Then I think to change the configuration file to resize the window.
The configurations are stored in ~/.purple/prefs.xml

I then, opened this file and searched for 'width'
The width in which I was interested is related to 'buddy list window'
i.e. look for section 'blist' and change the width variable according
to your need (I had set it to 300).
<pref name='blist'>
...
...
<pref name='width' type='int' value='300'/>
...
...
</pref>

Save this file and restart pidgin and viola!!
This Works :)

Wednesday, April 8, 2009

Sending stderr (Standard Error) to Pipe

Many times we want to send output of standard error (stderr)
to pipe '|', so that we can use it as input for another command.

For example, while compilation of program, we are mostly interested
in error/warning messages. We can not get those lines by following
command:

$ make | egrep -i "error|warning"

so how can we can get only those error/warning message lines. We
just need to bind stderr (file handle 2) with stdout (file handle 1).
"2>&1"
The following example shows this:

$ make 2>&1 | egrep -i "error|warning"


Sunday, March 29, 2009

Backup Using rsync

There are many backup tools, but most are not as configurable as
rsync command. But still we may want more easiness to use rsync.
Therefore, I have written a Perl Script to use rsync for backing up
as many directories as you want. Here is a Perl script:


#!/usr/bin/perl
#===============================================================================
#
# FILE: rsync_backup.pl
#
# USAGE: ./rsync_backup.pl [output_dir]
#
# DESCRIPTION:
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: Mitesh Singh Jat (mitesh), <mitesh[at]yahoo-inc[dot]com>
# VERSION: 1.0
# CREATED: Saturday 28 March 2009 07:36:54 IST IST
# REVISION: ---
#===============================================================================

use strict;
use warnings;

my $rsync_include = "rsync_include.conf";
my $rsync_exclude = "rsync_exclude.conf";
my $out_dir = "/media/FreeAgent Drive";
if (@ARGV >= 1)
{
$out_dir = $ARGV[0];
}

unless (-f $rsync_include)
{
print STDERR "$0: Include config file $rsync_include is not present.";
exit(-1);
}
my $exclude_option = "--exclude-from=$rsync_exclude";
unless (-f $rsync_exclude)
{
print STDERR "$0: exclude config file $rsync_exclude is not present.";
$exclude_option = "";
}
unless (-d $out_dir)
{
print STDERR "$0: $out_dir Destination dir does not exists.\n";
exit(-1);
}
$out_dir =~ s/ /\\ /g;

open(FH, "$rsync_include") or die("$0: Cannot open $rsync_include\n");
my $line;
my $nlines = 0;
while ($line = <FH>)
{
my $command;
my $options = "";
chomp($line);
++$nlines;
if ($line =~ /^#/) # skip comments
{
next;
}
my @fields = split(//, $line); # this junk char is Ctrl-X
if (@fields < 3)
{
print "Not enough arguments in line $nlines\n";
next;
}
if ($fields[2] =~ /^[Yy]/) # sync
{
$options .= " --delete --delete-excluded";
}
if (defined($fields[3]))
{
$options .= " $fields[3]";
}

$fields[0] =~ s/<home>/\/home\/mitesh/;
$fields[1] =~ s/<home>/\/home\/mitesh/;
$fields[0] =~ s/<out_dir>/$out_dir/g;
$fields[1] =~ s/<out_dir>/$out_dir/g;

$command = "rsync -av $fields[0] $fields[1] $options ";
system($command) == 0 or die("$0: Error in running\n$command\n$!\n");
}
close(FH);
exit(0);



There are 2 configuration files, I have used for this script. Namely
1. rsync_include.conf
2. rsync_exclude.conf

Please place these 2 files in the directory, from where you are going
to run this script, else you can change path of these configuration
files in rsync_backup.pl .

Sample rsync_include.conf contains:
# Configuration file for backing up
#
# ^X is delimiter, which can be typed as Ctrl-V Ctrl-X
#src_folder^Xdest_folder^Xdelete_at_dest[Y/n]^Xother_rsync_options
#
## delete_at_dest =>
# y = sync // Use cautiously
# n = copy blindly
#
# Some tags that can be used:
## <home> = Home directory; change to your home directory in the script.
## <out_dir> = Common Destination Directory
#
/home/mitesh/Music^X<out_dir>^Xy^X
<home>/Documents^X<out_dir>^Xn^X
<home>/Programming^X<out_dir>^Xn^X
/home/mitesh/Videos^X<out_dir>^Xn^X
#/workspace/temp/*^X<out_dir>/temp^Xn^X
/mnt/extra/Extra/Films/*^X<out_dir>/Videos^Xn^X
/mnt/extra/Extra/Download/*^X<out_dir>/Videos^Xn^X

Sample rsync_exclude.conf contains:
.trash
Trash
Cache
.thumbnails
*.torrent

Sample run (I have placed above config files in ~/bin/):
$ cd ~/bin
$ ./rsync_backup.pl
...
or, if you want to use some backup directory on harddisk,
mounted on /media/disk (say, /media/disk/backup)
$ ./rsync_backup /media/disk/backup