1. rotate and resize PDF
  2. source

    The program pdfjam is installed with:

    sudo apt install texlive-extra-utils

    I then did:

    pdfjam --paper a4paper --angle 90 some-file.pdf

  3. ultra-useful script for reducing the size of PDF files by lowering resolution
  4. find . -iname \*.pdf -exec gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile='{}.2.pdf' '{}' \; -exec mv '{}.2.pdf' '{}' \; 

    NB: I have not found a way to specify a custom resolution that would be lower to that of /screen


    1. https://askubuntu.com/a/256449
    2. https://stackoverflow.com/a/6043896

  5. useful programs for examining / comparing binary files
  6. hexdump, cmp and the hexl-mode of emacs

  7. how I downloaded files from my Android phone to Ubuntu
  8. I installed the FileManager+ application on my Android device which has an option "Access from network" which I then used to download the files to my machine using the filezilla program. I tried the command-line version of ftp but it didn't support wildcards. Also, FTP support has been removed from Chrome so that wasn't an option either. Filezilla worked like a charm.

    On AM's Android device I couldn't find FileManager+ to install on the app store (only on dangerous 3rd party stores) so I installed (from the app store) the WiFi File Explorer app which offered a similar FTP functionality.

  9. concatenate PDFs (much simpler method)
  10. pdftk pg1.pdf pg2.pdf cat output all.pdf
  11. dead simple HTTP server
  12. source

    python3 -m http.server
    It should will serve whatever's in the CWD (e.g. index.html) at

  13. concatenate / merge multiple PDF into a single one
  14. NB: see simpler way above
    source 1 source 2
    I 've used the following:

    convert -density 300x300 -quality 100 1.pdf 2.pdf merged.pdf
    After I was hit with:
    convert: not authorized `*.pdf' @ error/constitute.c/ReadImage/412.
    I modified file
    as follows:
    <   <policy domain="coder" rights="none" pattern="PDF" />
    >   <policy domain="coder" rights="read|write" pattern="PDF" />

  15. analyze PDF document for malicious code
  16. Starting off from https://security.stackexchange.com/a/2897/131157 I used the following two programs:

  17. test mouse for click problems in Ubuntu
  18. xev | awk '/ButtonRelease/ {print $1, i++}'
  19. play music CDs from the command line
  20. mplayer -cdrom-device /dev/sr0 cdda://
  21. decrypting PDF files
  22. source

    On 2019-03-08 I used the qpdf tool as described in the source:

    sudo apt-get install qpdf
    qpdf –password=password –decrypt /home/lori/Documents/secured.pdf /home/lori/Documents/unsecured.pdf
    … it worked like a charm.

    NB: I encountered problems when trying to use the other approach suggested in the same source, namely that of using pdftk:

    $ pdftk ~/Downloads/plan-to-conquer-the-world.pdf input_pw superdupersecretpwd output foo.pdf
    Error: Unexpected Exception in open_reader()
    Unhandled Java Exception in main():
       at gnu.gcj.runtime.NameFinder.lookup(libgcj.so.16)
       at java.lang.Throwable.getStackTrace(libgcj.so.16)
       at java.lang.Throwable.stackTraceString(libgcj.so.16)
       at java.lang.Throwable.printStackTrace(libgcj.so.16)
       at java.lang.Throwable.printStackTrace(libgcj.so.16)

  23. convert audible *.aax files to *.mp3 in Linux
  24. getting a window's PID by clicking on it
  25. xprop _NET_WM_PID | cut -d' ' -f3
    {click on window}
  26. how to copy Audio CD in Ubuntu
  27. Install the awesome K3B (KDE Burning Tool) - much better than Brasero which has given me a lot of grief. The below worked like a charm in my 32-bit Ubuntu 12.04.5 LTS on July 2017.

    $ sudo apt-get install k3b -y --force-yes

    Launch with:

    $ k3b

  28. how to extract a slice out of an mp3 file without re-encoding (which might lead to quality degradation)
  29. ffmpeg -i long-boring-cd.mp3 -vn -acodec copy -ss 00:00:00 -t 00:03:03 my-favourite-track.mp3
  30. alsamixer settings
  31. Most of the alsamixer settings are about the microphones. Most of the settings are about the microphones But the PCM (Pulse Code Modulation) gain control effectively controls the volume.

    Pulse Code Modulation (PCM) is the primary way analog audio signals are converted into digital form by taking samples of the waveforms from 8 to 192 thousand times per second (8 to 192 kHz) and recording each sample as a digital number from 8 to 24 bits long (seesampling). PCM data are pure digital audio samples, and they are the underlying data in several music file formats (see WAV, FLAC and AIFF).

    The audio-out port on a sound card provides an analog signal to the speakers; however, compressed formats such as MP3 and AAC are converted to PCM, and the PCM data are converted to analog (see D/A converter). Sound cards may also output PCM and other digital signals such as Dolby Digital (see S/PDIF). With regard to input, an analog microphone is plugged into the audio-in port, and the sound card converts the analog signals to PCM.

  32. sound issues in Ubuntu 16.04
  33. I recently (Autumn 2017) lost sound in two separate occassions, on two separate machines (Ubuntu 14.04 and Ubuntu 16.04). I managed to restore sound with the following two methods:

    In both cases I tried playing with the alsamixer dB gains settings but that didn't fix my problem.

    To verify the solutions I used:

    play /usr/share/sounds/alsa/Front_Center.wav

  34. how to encrypt PDF files in Ubuntu
  35. (source) — the following worked on Ubuntu 16.04 in 2017:
    sudo apt install pdftk
    pdftk ~/Downloads/mp.pdf output ~/Downloads/mp-encrypted.pdf owner_pw changeme user_pw changeme2
    The above incantation purposefully disallows printing the document. The owner and user passwords have to differ (I am not super-clear on the nuances).
  36. install Graphviz in Ubuntu 16.04
  37. how I managed to solve the dreaded suspend / resume failure on my Dell Precision M3800 laptop running Ubuntu 14.04 or 16.04
  38. install Chrome in Ubuntu 16.04
  39. synopsis:

    Download the package and install it force-installing the dependencies:

    sudo dpkg -i --force-depends google-chrome-stable_current_amd64.deb

    In case any dependencies didn't install (you would have a warning or failure message for this), you can force them via:

    sudo apt-get install -f

  40. Ubuntu 14.04 how to set sound levels on the command line
  41. source

    Increase volume by 5%

    amixer -D pulse sset Master 5%+

    Decrease volume by 5%

    amixer -D pulse sset Master 5%-

    Set volume to 50%

    amixer -D pulse sset Master 50%

    NB: Under i3wm I have binded the above commands to my laptop volume control keys. The bindings live in the ~/.config/i3/config file (on my Precision machine).

  42. how to install Skype on Ubuntu 14.04 64bit LTS
  43. The installation was eventfull — I ended up using the following links:

    1. installation instructions
    2. post-installation library problem fix — step 1
    3. post-installation library problem fix — step 2

    … I ended up adding the following line:
    alias skype='LD_PRELOAD=/usr/lib/i386-linux-gnu/me‌​sa/libGL.so.1 skype'
    … in the .bashrc_thisnode file for the Dell Precision laptop (where I am running Unbuntu 14.04 LTS 64 bit).

  44. how to merge multiple JPG or PNG files into a PDF file
  45. Use convert (source) to, e.g. do a:
    convert diploma-transcript-greek-pg1-col.jpg diploma-transcript-greek-pg2-col.jpg diploma-transcript-greek-full-size.pdf

    To control page size and background color you can do:

    convert IMG_20190331_143038.jpg IMG_20190331_143055.jpg IMG_20190331_143110.jpg -background white -page a4 plot-signed.pdf

    Following the conversion you may wish to compress the resultant PDF file.

    update When the files (e.g. PNG) are not already A4-sized I have also successfully used the below incantation:

    i=150; convert dell-stuff-pg1.png dell-stuff-pg2.png dell-stuff-pg3.png -resize $(echo ${i}*8.27 | bc)x$(echo ${i}*11.69 | bc) -density ${i}x${i} -repage $(echo ${i}*8.27 | bc)x$(echo ${i}*11.69 | bc) dell-stuff.pdf
    … based on this answer.

  46. how to compress a PDF file
  47. source
    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
    If the /screen option results in too low quality, try /ebook instead.
  48. how to test what a site looks like from various other world-wide locations
  49. Use geopeeker.com.
  50. test network speed
  51. The speedtest.net web site can be used to test upload and download speed to any geographical region of the world.
  52. how to dump specific bytes of a binary file in a human-readable format
  53. Use dd and pipe the output to either xxd or hexdump.
    $ dd if=sample-rapid-file ibs=1 skip=164 count=20 2>/dev/null | xxd -b
    0000000: 00000000 00000000 00000000 10111101 00000000 00000000  ......
    0000006: 00000000 00000000 00000000 00000000 00000000 00000001  ......
    000000c: 00000000 00000000 00000000 00000000 00000000 00000000  ......
    0000012: 00000000 00000000                                      ..

    ... or:
    $ dd if=sample-rapid-file ibs=1 skip=164 count=20 2>/dev/null | hexdump -C
    00000000  00 00 00 bd 00 00 00 00  00 00 00 01 00 00 00 00  |................|
    00000010  00 00 00 00                                       |....|
  54. how to output the binary representation of a file
  55. xxd -bp sample.dat | head -3
  56. capture a window with a fused delay of 10 seconds
  57. This is useful when wanting to also capture a context popup menu (e.g. as typically launched by a right mouse click).
    $ gnome-screenshot -w -d 10

    gnome-screenshot --interactive
  58. Hex editor for the shell
  59. Emacs has the hexl-mode for hexadecimal viewing/editing.
  60. infinite loop in bash; and break on problem
  61. while true; do ./valgraph-harvest-wrongsets-last-30-days-html; if [[ $? != 0 ]]; then break ; fi ; done
  62. proper way to encode a string in MD5 using md5sum
  63. Simply doing a:
    echo "password" | md5sum
    ... will not work as the shell also insidiously suffixes an end-of-line character.
    Either of the two ways have to be used instead:
    $ echo -n password | md5sum
    5f4dcc3b5aa765d61d8327deb882cf99  -
    $ printf '%s' "password" | md5sum
    5f4dcc3b5aa765d61d8327deb882cf99  -

    The insidious suffixing of an end-of-line character can be confirmed with the following:
    printf '%s\n' "password" | md5sum
  64. how to customize Conkeror with your own default key-bindings
  65. The instructions I found most useful are here. Also this page contains examples of using the define_key function which I found useful and actually used.
    My own Conkeror customizations are under git in ~/environment/.conkerorrc/ and they of course have to be symlinked from home:
    ln -s environment/.conkerorrc/

    ... in order for Conkeror to pick them up.
  66. how to install Conkeror in Ubuntu (again, latest approach)
  67. On 15.IX.2014 I used the following approach to install Conkeror: The source was this answer
  68. install the apt repository for Nightly built Conkeror Debian Pakcages
  69. source
    Add the following lines to your /etc/apt/sources.list (for Wheezy as in my system that's what cat /etc/debian_version shows):
    deb     http://noone.org/conkeror-nightly-debs wheezy main
    deb-src http://noone.org/conkeror-nightly-debs wheezy main

    Then add the latest key to your APT key ring without verfication, just execute the following as root:
    apt-key adv --keyserver pgp.uni-mainz.de --recv-keys 0F84088E
  70. Install the conkeror packages
  71. source
    sudo apt-get udpate
    sudo apt-get install conkeror conkeror-spawn-process-helper
  72. finally, rely on the (already existing by now) conkeror script and Dash integration using alacarte as described in the alternative instructions (used in the past) below
  73. convert PDF to PNG high-quality
  74. The below seems to give good results (source):
    convert -density 300 cds-oai-dc-problem.pdf -trim -quality 100  cds-oai-dc-problem.png
    By passing -trim as an option we also get rid of a subsequent trimming step.
  75. command line to convert a PDF file to PNG in Ubuntu
  76. convert database-high-level.pdf -background White -flatten database-high-level.png
    (the above incantation also replaces the transparent background with white background)
  77. trim PNG images in Ubuntu
  78. Use the trim command of the convert program from the ImageMagick package:
    convert input.png -trim output.png
  79. meld alternative (that also supports comparisons among more than 2 files)
  80. sudo apt-get install diffuse
  81. install DbVisualizer 9.1 in Ubuntu
  82. In the past I had some successes with the Linux x86 setup installer you can get from here, but today I failed repeatedly to get it to properly install using that script, so in the end I just downloaded the UNIX tar.gz archive (from the same location), exploded it locally and then added dbvis on the launchpad Dash using alacarte. I then searched my gmail for the dbvis.license key I have.
  83. add an arbitrary application to the Ubuntu Dash overlay of the launchpad
  84. Use alacarte. Info here.
  85. compare files in current directory only with those of another directory
  86. way 1
    The below way uses the snapshot_dir as the reference directory, so if a file is missing there it is not compared.
        for f in $(find snapshot_dir -maxdepth 1 -type f -iname \*.xsd -o -iname \*.dtd) ; do diff `basename $f` $f ; done

    way 2
    The below way uses the local_dir as the reference directory, so if a file is missing there is is not compared.
        for f in $(find . -maxdepth 1 -type f -iname \*.xsd -o -iname \*.dtd) ; do diff $f snapshot_dir/$f ; done
    I suppose the most rigorous check is combining both ways in a single script.
  87. how to install Conkeror in Ubuntu
  88. Original link here. Four steps:

    1. instal xulrunner
    2. follow top answer here.

      Note that for some reason the sudo sh -c "wget -O- $XURL | tar -xj" command didn't work for me and I had to manually download $XURL (in my case it was this link), and then do a:

      sudo cat ~/Downloads/xulrunner-23.0.en-US.linux-i686.tar.bz2 | sudo tar -xj
    3. install Conkeror
    4. For that, I didn't follow my earlier routine (described here), but rather I simply cloned Conkeror's git repository:
      git clone http://repo.or.cz/r/conkeror.git
    5. preapare a conkeror script
    6. In my case, that script I prepared (based on instructions found here resides in the ~tools git repository.
    7. add the script to the Dash using alacarte
    8. Instructions here.

  89. how to open up a terminal in any folder of the file browser
  90. sudo apt-get install nautilus-open-terminal

    then, right-clicking on a folder shows option "Open in Terminal" (a log-off / log-in cycle may be necessary)
  91. how to install bd (quickly go back to a specfic parent directory)
  92. Original link:

    (I 've downloaded it at ~/tools, so I it's not on /usr/bin/bd)
  93. get diff (esp. a recursive one) to produce very summarized output
  94. Pipe the output of diff to diffstat
  95. find out quickly the amount of memory recognized by the system
  96. free -mt
  97. find out if the Linux version and/or the hardware support PAE (Physical Address Extension)
  98. This is determined by searching for the string 'pae' in the output of the following programs, for the OS and the hardware, respectively:
    uname -a | grep pae
    grep --color=always -i PAE /proc/cpuinfo
  99. show system specs in Ubuntu
  100. There are many ways:
    sudo lshw
    sudo lshw -html > myspecs.html
  101. how to find which process binds on specific ports
  102. sudo netstat -tulpn 
    and then, once you have the PID (e.g. 3903), you can do a:
            ls -l /proc/3903/exe
            cat /proc/3903/cmdline
            ls -l /proc/3903/cwd 
    ... to find more about the process.
  103. pattern to use when in need to replace broken links in a systematic way:
  104. find . -iname \*.jar | while read ANS;
        do DIR=$(dirname "$ANS");
        cd "$DIR";
        rm $(basename "$ANS"); 
        ln -s ../../../../../../../../repo-wide-libs/$(basename "$ANS");
  105. interesting tar incantation
  106. tar jcpf archive-name.tar.bz2 www/{folderA,folderB} 
  107. report total disk usage of directory
  108. du -s
    Also, -b to report bytes and -h for human-readable.
  109. cleanse hash table info of the shell as to the location of executables
  110. hash -r
  111. alternative to diff
  112. one can use md5sum
  113. list open TCP sockets
  114. lsof | grep TCP
  115. recursively copy remote folder and keep permissions and modes (alternative to scp)
  116. ssh mperdikeas@ 'tar cpf - cluster/' | tar xpvf -
  117. how to find broken links
  118. find -L -type l
    I.e. find files following links (-L) and report those that remain links (-type l)
  119. find and kill an app
  120. Let's say we need to find and kill the Conkeror app:
    ps axwww | grep conkeror | grep -v grep

    or, better yet:

    ps axwww | grep 'c[o]nkeror'
    (note: I don't see any difference with the 'axw' flags)

    Once you get the pid a kill -7 should normaly suffice.

  121. troubleshooting sound problems in Ubuntu
  122. 'Tis a long and sad tale. The gist of the matter (and what worked for me) was a combination of purging pulseaudio (including locally modified config files in /etc/pulse) and re-installing it, (and doing the same for other Ubuntu audio libraries as well). Helpful material:
    1. trouble shooting procedure
      I followed the above guide on 2016-04-21 on my 12.04 LTS machine and what did the trick was Step 6 where I am asked to install and use pavucontrol:
      sudo apt-get install pavucontrol
    2. trouble shooting guide
    Actually, the second was rather more helpful than the first.

    Litmus tests:

    play /usr/share/sounds/alsa/Front_Center.wav
    ... and the Skype echo service.

    Another thing to check out for is to make sure that the user belongs to the audio group. I.e. do a:

    sudo \emacs -nw /etc/group
    Finally, I also tried this guide on setting the default audio card although it didn't have any effect in this particular case (maybe the problem wasn't there).
  123. re-enable the sound icon on Ubuntu precise
  124. The following incantation worked for me:
    sudo apt-get install indicator-sound
    killall unity-panel-service
  125. how to change a file's encoding from ISO8859-7 to UTF8
  126. It may happen that the javac compiler complains for the encoding used in a file. Rather than using the -encoding option to javac (in the build.xml, use <presetdef> to setup defaults for all of your javac invocations and pass -Dfile.encoding=iso-8859-7) one can also convert the file manually.

    To find the offending file:

     $ ant  2>&1 | grep unmapp | awk '{print $2}' | sed 's,:.*,,' | sort | uniq
    convert it with iconv:
    iconv -f ISO8859-7 -t UTF-8 
    (you may also have to export LANG=en_US.UTF-8)
  127. piping with xargs
  128. To rm all java files (you need the -print0 and -0 options to work with filenames containing spaces etc.):
    find . -iname \*.txt -print0 | xargs -0 rm
  129. pipe coloured output through less
  130. Use the 'ls -RG' option and make sure the original application (that generates the colour-coded output) is set to --color=always if such option exists.
  131. find the package a binary belongs to in Debian distros
  132. E.g. find the package for sensors:

    dpkg -S $(which sensors)
  133. monitor chipset and CPU sensors in Ubuntu
  134. Use sensors from package lm-sensors as in:
    watch sensors
  135. change hostname in Ubuntu
  136. simply edit /etc/hostname and /etc/hosts (for To flush the previous hostname from various applications a reboot may be required.
  137. setting HTTP proxy in Ubuntu
  138. export http_proxy="http://foo.bar:8080"
    subsequent wget requests will redirect to foo.bar:8080
  139. package managers
  140. apt is used in Debian, Ubuntu and rpm in Fedora, Redhat, Suse. apt is better.

    Typical apt commands: apt-get install, apt-cache search, apt-get autoremove, apt-get update.

  141. curl
  142. curl is a Linux utility that can be used to simulate HTTP GET and HTTP POST requests. A simple:
    #curl www.in.gr
    ...will execute an HTTP GET against www.in.gr.
  143. SSE time
  144. get time in SSE:
    date +%s
  145. Linux Operating System Information
  146. General OS information (including whether the kernel is 32 or 64 bit):
    uname -a

    or (if you are only interested in 32bit vs. 64bit):
    x86_64 GNU/Linux indicates that you've a 64bit Linux kernel running. If you use see i386/i486/i586/i686 it is a 32 bit kernel.
    NB:This applies to the operating system kernel, not the CPU itself.
  147. Find if CPU is 32 or 64 bits
  148. grep ^flags /proc/cpuinfo | uniq | grep lm

    ("lm" means long mode CPU - 64 bit CPU)
  149. find installed packages
  150. apt-cache search  - or -
                          dpkg --get-selections | grep 
  151. how to find a file named "compile_decoder.sh" in a set of bz2 files
  152. for f in `ls *.bz2` ; do tar -jtvf  $f ; done | grep compile_decoder.sh

    ... Actually, the following also works and produces identical output:
    for f in `ls *.bz2` ; do tar -jtvf $f | grep compile_decoder.sh ; done
  153. to find out the release
  154. $ lsb_release -a
  155. how to start xserver in Cygwin:
  156. startxwin
    ... and then to redirect X output from the new shell:
    ssh -X mperdikeas@remote.location
  157. see all processes run by user 'mperdikeas':
  158. $ps -u mperdikeas
  159. bootable USB drive from ISO image
  160. In order to create a bootable USB drive from an ISO image it is not possible to use dd and perform a binary data copy. Special magic has to be used. Ttsiodras sent me a folder with the necessary magic. Bottom line is that the files in the ISO image are actually copied and that special bits are set in the flash drive's filesystem to denote the partition as bootable. See folder CreateUSBstickFromISO. However I was not able to make it work; the USB flash drive was formated and created but I wasn't ablt to boot it. In the end I just burned a CD. BTW the following page: http://www.ubuntu.com/download/ubuntu/download created detailed instructions on how to create a USB flash drive and suggests another solution ("Pen Drive Linux's USB Installer"). There is also another option which is to create a Live Linux USB stick or even a persistent one (with the ability to save files, install programs and so on). This option is possible using the "LinuxLive USB Creator 2.8.10.exe" program.
  161. to find the Linux kernel release and distro:
  162.         uname -mrs
            lsb_release -a
  163. how to find if a Linux machine is 32 or 64 bits:
  164. uname -m
    - or -
    cat /proc/cpuinfo
  165. Print recursive size of folders (i.e. including contents):
  166.                 sudo du - s -m *
    (because ls -lah only displays the size of the directory file).
  167. proper way to copy recursively directory tree a into b (including file permissions etc):
  168. cp -a a b

    You don't need anything else and the internal symbolic links are nicely preserved.
  169. how to find in which package a binary belongs, e.g. the lsb_release binary:
  170. dpkg -S $(which lsb_release)
  171. to show the versions of debian apt packages use the apt_show_versions utility
  172. apt things ...
  173. The /etc/apt/sources.list file is not directly related to the operations of the: apt-get dist-upgrade command the dist-upgrade command always stays in the same Debian version but implements the progression: stable->testing->unstable. So, for instance from the stable phase it takes two invocations of the dist-upgrade to reach the unstable phase; from the testing phase only one. And you can't go backwards. The /etc/apt/sources.list file "simply" provides the URL of the repositories for each version.
  174. hex-dump:
  175. hexdump -C  ('C' for console output)
    to edit:
  176. how to cut the first few lines of a file (in the below example, the 1st one):
  177. tail -n +2 "$FILE"
  178. how to remove the last line from a file (in place editing):
  179. sed -i '$d' filename
  180. how to remove the last n lines from a file (in the below example n = 2):
  181. head -`wc -l thefile | awk '{print ($1-1)}'` thefile