How To …
Printing multi-page duplex documents
by Mostafa on Oct.18, 2009, under How To ..., Linux, Software
The psnup tool can be used to place multiple pages on each sheet of a document. E.g., the following command places two pages from the input file into each sheet of the output:
$ psnup -l -2 input.ps output.ps
While psnup is excellent for quick “N-up” conversion jobs, it doesn’t provide much control over the layout. The pstops utility on the other hand allows for fine grained scale, rotation and placement settings for each page that goes into a sheet of the output. The command syntax is a bit more complicated on account of the page specification strings that must now be provided. The following example shows a typical command needed to prepare a document for duplex printing with two pages on each side of a sheet:
$ pstops -pa4 \ '4:0L@0.8(21cm,-1cm)+1L@0.8(21cm,12.55cm),2R@0.8(0,29.85cm)+3R@0.8(0,16.25cm)' \ input.ps output.ps
The command is best understood by referring to the relevant section from the manpage:
Pstops rearranges pages from a PostScript document, creating a new PostScript file. The input PostScript file should follow the Adobe Document Structuring Conventions. Pstops can be used to perform a large number of arbitrary re-arrangements of Documents, including arranging for printing 2-up, 4-up, booklets, reversing, selecting front or back sides of documents, scaling, etc. pagespecs follow the syntax: pagespecs = [modulo:]specs specs = spec[+specs][,specs] spec = [-]pageno[L][R][U][@scale][(xoff,yoff)] modulo is the number of pages in each block. The value of modulo should be greater than 0; the default value is 1. specs are the page specifi- cations for the pages in each block. The value of the pageno in each spec should be between 0 (for the first page in the block) and modulo-1 (for the last page in each block) inclusive. The optional dimensions xoff and yoff shift the page by the specified amount. xoff and yoff are in PostScript’s points, but may be followed by the units cm or in to convert to centimetres or inches, or the flag w or h to specify as a multiple of the width or height. The optional parameters L, R, and U rotate the page left, right, or upside-down. The optional scale param- eter scales the page by the fraction specified. If the optional minus sign is specified, the page is relative to the end of the document, instead of the start. If page specs are separated by + the pages will be merged into one page; if they are separated by they will be on separate pages. If there is only one page specification, with pageno zero, the pageno may be omitted. The shift, rotation, and scaling are performed in that order regardless of which order they appear on the command line.
Restricting access to SFTP / SCP
by Mostafa on Oct.18, 2009, under How To ..., Linux, Software
rssh is a tool that allows SFTP/SCP for file transfers over SSH but denies shell access — useful for preventing users from running commands on the system. More details are available on the tool’s homepage.
I first came across it on this page.
Embedding fonts in a PDF document
by Mostafa on Oct.03, 2008, under How To ..., LaTeX, Linux, Software
It is often a good idea (or a requirement) to embed the used font faces in a PDF document. This is easily accomplished using ps2pdf during the final stage of conversion of a document from PS to PDF:
$ ps2pdf -sPAPERSIZE=a4 -dPDFSETTINGS=/printer -dCompatibilityLevel=1.3 \ -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true \ 'input_file.ps' 'output_file.pdf'
An explanation of the command options can be found in the Ps2pdf.htm file in the Ghostscript documentations (or here).
[Source]
Re-encoding MP3 files using LAME
by Mostafa on Jun.06, 2008, under How To ..., Linux, Software
I have some MP3 files encoded at a constant bitrate of 320kbps that my phone seems to have trouble playing smoothly. So, I looked into LAME.
The files I had were named using the following scheme:
01 - Title of track 01.mp3 02 - Title of track 02.mp3 ...
I used the BASH for-loop construct to process the files:
$ for A in *.mp3;\ # Process one mp3 at a time do B=${A%.mp3};\ # Extract track number and title C=${B#?? -};\ # Extract the title D=${B%% - *};\ # Extract the track number lame --vbr-new -V0 -q0\ # Variable-bitrate, high-quality --mp3input\ # Inputs are MP3 files --tt "$C"\ # ID3v2 tags: title --ta 'Artist Name'\ # ID3v2 tags: artist --tl 'Album Title'\ # ID3v2 tags: album --ty 2007\ # ID3v2 tags: year --tn "$D"\ # ID3v2 tags: track no. --tg 'GENRE'\ # ID3v2 tags: genre "$A" processed/"$A";\ # Keep filename and save in ./processed/ done
Since no bit-rate bounds are explicitly provided, the re-encoded files can contain anything between 32kbps and 320kbps. The LAME man-page provides an extensive list of options and their meanings.
Processing files using ‘find’
by Mostafa on Mar.26, 2008, under How To ..., Linux, Software
In its most basic form, find is often used to locate files that are subsequently piped through a complex set of commands for processing. However, this particular method is easily broken by files that contain spaces in their names.
This is where the ‘exec’ option provided by find comes in handy. From the man-page:
-exec command ; Execute command; true if 0 status is returned. All following arguments to find are taken to be arguments to the command until an argument consisting of ‘;’ is encountered. The string ‘{}’ is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is alone, as in some versions of find. Both of these constructions might need to be escaped (with a ‘\’) or quoted to protect them from expansion by the shell. See the EXAMPLES sec- tion for examples of the use of the ‘-exec’ option. The speci- fied command is run once for each matched file. The command is executed in the starting directory. There are unavoidable security problems surrounding use of the -exec option; you should use the -execdir option instead.
An example that recursively touches all *.log files from the current directory would be:
$ find . -name \*.log -exec touch {} \;
Embedded multimedia in LateX/Prosper
by Mostafa on Dec.01, 2007, under How To ..., LaTeX
The movie15 package by Alexander Grahn is useful for this purpose. The movies embedded, however, cannot be viewed with any PDF reader on Linux.
Extracting Audio/Video
by Mostafa on Dec.01, 2007, under How To ..., Linux, Software
It’s really easy to extract either audio or video from a multimedia file using ‘ffmpeg‘. To extract audio only:
$ ffmpeg -i inputfile -vn -acodec copy outputfile
And for video only, replace ‘-vn‘ with ‘-an‘ and ‘-acodec‘ with ‘-vcodec‘.
ffmpeg is also commonly used as a transcoding tool.
SSH Blacklisting
by Mostafa on Nov.29, 2007, under How To ..., Linux, Software
After getting around 1500 failed ssh login attempts a day for a while on a server I manage, I decided to look into tools that automatically blacklist offending IPs.
Sshblack fits the bill perfectly. A HOWTO (including an init-script) for REDHAT-like systems is available from the OSS Watch Wiki.
Logo in a LaTeX document header/footer
by Mostafa on Oct.22, 2007, under How To ..., LaTeX
Easily accomplished using the ‘fancyhdr‘ package:
\usepackage{fancyhdr} \renewcommand{\headheight}{0.6in} \setlength{\headwidth}{\textwidth} \fancyhead[L]{}% empty left \fancyhead[R]{ % right \includegraphics[height=0.53in]{img-file} } \pagestyle{fancy}
All of that goes into the preamble of the document.
User installation of additional TeX/LaTeX classes and styles
by Mostafa on Aug.09, 2007, under How To ..., LaTeX, Linux
When you are the sysadmin, you can simply drop the new class/style files under the system TeX path (e.g. /usr/share/texmf/tex/) and run ‘texhash’ to have them automatically picked up. But what do you do when you are just a regular user?
TeX/LaTeX looks at the TEXINPUTS environment variable to look for additional locations to search for included/referenced files. Therefore, new classes/styles can be easily added as follows:
- Create a directory for the files:
$ mkdir -p $HOME/tex/latex
- Place the new class files into that folder (each class can be in its own directory and contain subdirectories):
$ cp -a fancy-class $HOME/tex/latex/
- Export the TEXINPUTS variable and also add it to your $HOME/.bash_profile:
$ export TEXINPUTS=.:$HOME/tex/latex//:$TEXINPUTS
The ‘.’ ensures that the working directory is included in the search path. The double-‘//’ tells bash to also include files in subdirectories of ‘$HOME/tex’ recursively.
New BibTeX files can also be added locally in a similar fashion. The variables to set are then BSTINPUTS and BIBINPUTS.
The environment variable to set for MakeIndex styles is: INDEXSTYLE.
Source: AstroNat – Installation at The Smithsonian/NASA Astrophysics Data System
UPDATE [16 July 2009] The Kpathsea manual provides a wealth of information about usable environment variables.