Home –  Archive
Monthly Archives: Feb 2012

Your own command line password generator!

random password from command line

When you need to create a random password, stop brain storming over random characters as you have Linux command line at your disposal. It can accomplish things perfectly and, there are multiple ways to do it. Today we are creating our own command line password generator. We have assembled some ways to create a random password. We will start off with an easy one, its easy to remember:

Using md5sum

It doesn’t give you enough options but its random enough.

date +”%N” | md5sum If you want some more control, keep reading.

For rest of the following random password commands, you are allowed to modify them according to your requirement like restricting the number of characters returned.

Using /dev/urandom

It is a built-in feature. Following command return only those characters which you need to use in a password.

< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;

Another way to do it but in reverse order:

tr -cd '[:alnum:]' < /dev/urandom | fold -w30 | head -n1

Using SHA

Date is hashed via SHA, passed on to base64 and 32 characters appear in output.

date +%s | sha256sum | base64 | head -c 32 ; echo

Using Strings

String command filters and returns printable straings:

strings /dev/urandom | grep -o ':alnum:' | head -n 30 | tr -d '\n'; echo

Using urandom (again!)

This one is less complicated:

< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6 ; echo ;

Using dd command

Ever thought dd is capable of doing this?

dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev

Using openssl’s rand

It may not be available on your system:

openssl rand -base64 32

If you feel like using some method again and again, you can save yourself the trouble of executing the command by putting it into a function and placing that function in ~/.bashrc. For an instance, if you want to create a function for SHA one here is the code:

genpass() { date +%s | sha256sum | base64 | head -c 32 ; echo } We are calling our random password generator as “genpass”.

All the commands are tested on our own system, screenshot:
random password from command line

So whats your favorite method? Post it in comments.

DuckDuckGo received over 1 million direct searches for the first time ever

duckduckgo twitter

DuckDuckGo (a search engine in Perl) is climbing the mountain of success very fast. It has almost defeated its competetors on privacy issues. Last year Linux Mint declared DuckDuckGo to be its default search engine. Now the latest achievement is that DuckDuckGo grew from 500,000 direct searches in one day in November, to a new record of 1 million in one day (on 13 Feb 2012). It is really impressive! The announcement was made on Twitter on 15 Feb.

duckduckgo twitter

DuckDuckGo had 1,067,006 direct searches on 13 Feb according to its public traffic page.

duckduckgo 1 million

Last year on Feb 13 DuckDuckGo had 176,000 direct searches. It achieved 500,000 searches on November 28, 2011 and reached to 1,067,006 on Feb 13. Growing fast! Isn’t it?

Here’s why you can’t update to Ice Cream Sandwich right away

Android-icecream-sandwich

Android-icecream-sandwich

Ice Cream Sandwich, best piece of software from Google (till date), was released in October, 2011. This Android software is beyond imagination and pinches in your whole world in your palms. Users wait eagerly for an android update but what is restraining them from installing one? Let’s find out.

Involvement on multiple parties holds the whole update process back. Its not that manufacturers and carriers don’t want to push out latest updates but before doing that they need to test it on their equipment for compatibility issues. Suppose a Motorola handset which is sold by Verizon. Manufacturers are Motorola but the software is made by Google and is running on Verizon network. Therefore, an update before being pushed out to end users should be tested by Motorola for hardware compatibility. This update when released will be passed on to carriers for further testing. When they approve of, only then updates are made available for users.

This whole life cycle seems to progress slowly but truth behind this is, of course, multiple parties. iPhone users don’t have to face this issue as every stage is carried out in ‘house’ itself. Android users have to wait a bit longer to enjoy Ice Cream Sandwich and we are sure that it is worth waiting.

How to change Ubuntu logo in Enlightenment E17

logo white 128

logo_white_128.png

Enlightenment is a window manager for Linux. It helps you creating beautiful user interfaces with less effort.

In this article we will see how to change Ubuntu logo in E17.

Open any text editor (I prefer gedit), copy paste the code given below and save it as filename logo_ubuntu.edc in the folder Downloads.

collections { 
group { 
name: "e / modules / start / main", 
max: 128 128; 
images { 
image: "logo_white_128.png" COMP; 
image: "logo_black_128.png" COMP; 
} 
parts { 
part { 
name: "base " 
description { 
state: "default" 0.0; 
aspect: 1.0 1.0; 
aspect_preference: BOTH; 
image.normal "logo_white_128.png"; 
} 
description { 
state: "active" 0.0; 
inherit "default" 0.0; 
visible: 0 ; 
color: 255 255 255 0; 
} 
} 
part { 
name: "over"; 
description { 
state: "default" 0.0; 
visible: 0; 
rel1.relative: -0.5 -0.5; 
rel2.relative: 1.5 1.5, 
Color: 255 255 255 0, 
aspect: 1.0 1.0; 
aspect_preference: BOTH; 
image.normal "logo_black_128.png"; 
} 
description { 
state: "active" 0.0; 
inherit "default" 0.0; 
rel1.relative: 0.0 0.0; 
rel2.relative : 1.0 1.0; 
visible: 1, 
color: 255 255 255 255; 
} 
} 
} 
programs { 
program { 
name: "on" 
signal "e, state, Focused" 
source "and" 
action: STATE_SET "active" 0.0, 
transition: LINEAR 0.2, 
target: "base" 
target "over"; 
} 
program { 
name: "off" 
signal "e, state, unfocused" 
source "and" 
action: STATE_SET "default" 0.0, 
transition: LINEAR 0.3, 
target: "base" 
target "over"; 
} 
} 
} 
}

The code gives following two images.

logo white 128

logo_white_128.png

logo white 128 2

logo_black_128.png

Now open up your terminal and type the commands given below

chankey@linuxstall:$ cd
chankey@linuxstall:$ cd Downloads
chankey@linuxstall:$ edje_cc logo_ubuntu.edc
chankey@linuxstall:$ logo_ubuntu.edj $ mv $ Home / .e / e / themes

Above steps compile the program which we have written and generate a
logo_ubuntu.edj
file which contains the images and moves it to themes folder.

Now go to Menu -> Preferences -> Theme and click ‘Advanced‘ button.

Look for modules/start under Categories. It will open a sub menu, search for logo_ubuntu there. Select it and click on apply.

modules start

You have successfully changed your Ubuntu logo in E17.

ubuntu logo white

ubuntu logo black

CentOS vs Ubuntu

CentOS and Ubuntu both are Linux distros. Below are some major differences between them.

1. CentOS is based on RHEL (Red Hat Enterprise Linux), while Ubuntu has its roots in Debian.

2. On an Ubuntu system the root password is randomly generated which is not known to the administrator. You will have to use ‘sudo command’ to get root-privileges.

3. Repositories of Ubuntu contain fresher packages than CentOS, it tends to be less conservative than CentOS, whereas CentOS packages focuses only on security patches.

4. CentOS uses YUM package manager with RPM packages whereas Ubuntu uses apt with DEB packages.

5. Ubuntu cleanly upgrades between major versions, CentOS is not so good to do that (needs a reinstall often). [via: Liz Quilty]

Know some more differences? Please put them in the comment box, I will add them in the post.

Recommended reading: “CentOS vs Ubuntu

Protect your web server with SSL certificate

If you are a system administrator who is running a web server then you may want to protect it so that no one can hack into it and misuse the important data. Networks by themseleves are not secure enough, you will have to find other ways to make your server more secure. Here in this article we will examine ways in which you can help guard your important data.

Nowadays all the E-commerce applications (banking and online shopping for example) are encrypted using either SSL or TLS specifications. SSL stands for Secure Socket Layer and TLS means Transport Layer Security. Actually TLS is based on SSL 3.0 hence they are very similar in nature. For secure web connections first of all the SSL connection is established and then the HTTP communication is “tunneled” through it.

Note: Since name-based virtual hosting occurs at HTTP layer and as I said that SSL gets established before any HTTP communication, it causes problems with name-based virtual hosting. In short name-based virtual hosting does not work easily with SSL.

To verify the identities and for establishing session parameters along with a session key, asymmetric cryptography is used during connection establishment between an SSL client and SSL server. Then a symmetric encryption algorithm (DES or RC4) is used with the negotiated key to encrypt all the data which is being transmitted during the session. This means that asymmetric encryption (during the handshaking phase) provides safe communication whereas symmetric encryption works on the session data (for faster and more practical use).

For the client to verify the identity of the server, the server must have a private key and a certificate (which contains the public key and information about the server). The client also contains a public key, which it uses to verify the certificate of the server (matches public key of client with the public key of server which is mentioned in the certificate).

Certificates are generally digitally signed by third-party certificate authorities (CA) which have verified the identities of the requester and the validity of the requests to have the certificate signed. In most of the cases CA is a company which contacts with vendors of web browsers to have its own certificate installed and trusted by default client installations. Then certificate authorities earn by charging server operators for its services.

There are many commercial certificate authorities which differ in features, price but as people say “Price is not always an indication of quality“. VeriSign, InstantSSL and Thawte are some popular CAs.

Instead of going for certificate authorities you can create self-signed certificates, but those should be used only for testing if the number of people who will be accessing your server are less.

Another option is to run your own certificate authority but we are not going to cover that in this article.

Generating SSL keys

Delete the old key and certificate

chankey@linuxstall:$ rm /etc/pki/tls/private/localhost.key
chankey@linuxstall:$ rm /etc/pki/tls/certs/localhost.crt

Create your own key

chankey@linuxstall:$ cd /etc/pki/tls/certs
chankey@linuxstall:$ make genkey
umask 77 ; \
	/usr/bin/openssl genrsa -aes128 2048 &gt; /etc/pki/tls/private/localhost.key
Generating RSA private key, 2048 bit long modulus
.................+++
.......................................................................................................................+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:

Creating self-signed certificate

chankey@linuxstall:$ make testcert
umask 77 ; \
	/usr/bin/openssl req -utf8 -new -key /etc/pki/tls/private/localhost.key -x509 -days 365 -out /etc/pki/tls/certs/localhost.crt -set_serial 0
Enter pass phrase for /etc/pki/tls/private/localhost.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:IN
State or Province Name (full name) []:Rajasthan
Locality Name (eg, city) [Default City]:Jaipur
Organization Name (eg, company) [Default Company Ltd]:Linux Stall
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:www.linuxstall.com
Email Address []:admin@linuxstall.com

This is how it looked on my server:

ssl certificate linux

This will create a file localhost.crt in /etc/pki/tls/certs/. Now open the file ssl.conf which is located at /etc/httpd/conf.d/ and edit it with the content given below:

SSLCertificateFile /etc/pki/tls/certs/localhost.crt

Restart your web server

chankey@linuxstall:$ service httpd restart

Now you’re done. Open your browser and use httpd in front of each URL instead of http. You can ignore the certification validation message which your web browser may prompt.

Removing password encryption on private key

You will notice that whenever you restart your server it asks for certificate password. This is for security purpose so that no one can break into your server and steal your private key. You are safe in the knowledge that the private key is a jumbled mess. The cracker will not be able to make use of it but without such protection, a cracker could get your private key and easily masquerade as you, appearing to be legitimate in all cases.

If you are willing to accept the risk and cannot stand having to enter the password every time your server starts, you can remove the password encryption on private key by entering the command given below:

chankey@linuxstall:$ cd /etc/pki/tls/private
chankey@linuxstall:$ /usr/bin/openssl rsa -in localhost.key -out localhost.key
Enter pass phrase for localhost.key: *******

Now you will be able to restart the server without entering a pass phrase.

Troubleshooting

Following tips will help if you are having problems with your SSL certificate:

  • You should know that only one SSL certificate can be used for one IP. If you want to add more than one web site (SSL enabled) to your server, you must bind another IP address to the network interface.
  • Don’t block port 443 on your server. All https request come on port 443. If this port is blocked then you will not be able to get secure pages.
  • The certificate expires after one year. Don’t forget to renew your certificate with your CA before expiration.
  • mod_ssl package should be installed on your server. If it is not then you will not be able to serve any SSL-enabled traffic.

Reference in Perl

Reference in Perl

Introduction

References are the most important feature of Perl which helps in creating complex data structures. This tutorial is aimed for a complete newbie in Perl. We will start with What references are? What are their benefits? How to use them? Their syntax and examples. Wasting no more time just dive into it!

What is a reference?

If you are familiar with C language then you can consider a reference as a pointer (not literally, because there are no pointers in Perl like C language). A variable can store a reference to some variable/value/array or hash.

Reference to a variable

+----------\\       +----------\\
|     x     >      |     y     >
+----------/       +----------/
      |                  |
+-----------+      +-----------+
|     O-----+----->|   54321   |
+-----------+      +-----------+

Here the variable $x has a reference which points to the value of variable $y (which is 54321).

To create a reference to a value we use the backslash operator (\\). For example:

#!/usr/bin/perl
use warnings;
my $y = 54321;
my $x = \$y;     # $x is a reference to the value of variable $y.
print "$y\n";    # 54321
print "$x\n";    # will print the address where the value 54321 is stored like SCALAR(0x13dcac0)
print "${$x}\n"; # 54321 (dereferencing a scalar variable)
print "$$x";     # 54321 (same as above)

Reference to an array

@a		@{$aref}		# An array
reverse @a	reverse @{$aref}	# Reverse the array
$a[3]		${$aref}[3]		# An element of the array
$a[3] = 17;	${$aref}[3] = 17	# Assigning an element
+----------\\
|     x     >      +----------\\
+----------/       |     y     >
      |            +----------/
+-----------+            |
|     O-----+----->+###########+
+-----------+      +"""""""""""+
                   |    Foo    |
+----------\\       +-----------+
|     z     >      |    ABC    |
+----------/       +-----------+
      |            |    BUZ    |
+-----------+      +-----------+
|     O-----+----->|    VIZ    |
+-----------+      +-----------+

Here the refernce $x is pointing to the array @y, reference $z is pointing to the 4th element of array @y i.e. $y[4].

#!/usr/bin/perl
use warnings;
my @y = ("Foo", "ABC", "BUZ", "VIZ");
my $x = \\@y;         # creating reference of an array
print "$x\\n";        # ARRAY(0x189faf0)
print "@y\\n";        # Foo ABC BUZ VIZ
print "@{$x}\\n";     # Foo ABC BUZ VIZ (dereferencing)
print "@$x\\n";       # Foo ABC BUZ VIZ (You may omit curly brace here)
print "${$x}[1]\\n";  # ABC  (Accessing element at position 1 of array using reference variable)
print "$$x[1]\\n";    # ABC  (Another way of doing the same)
print "$x->[1]";     # ABC  (You can use -> operator too)

Reference to a hash

You can make a reference to hash in the similar way as you created from scalar variables and array.

%h		%{$href}	      # A hash
keys %h		keys %{$href}	      # Get the keys from the hash
$h{'red'}	${$href}{'red'}	      # An element of the hash
$h{'red'} = 17	${$href}{'red'} = 17  # Assigning an element

Loop over an array or hash using reference

If you want to loop over an array then

for my $element (@array) {
           ...
}

If you want to loop over an array using reference then

for my $element (@{$aref}) {
           ...
}

If you want to loop over a hash then

for my $key (keys %hash) {
          print "$key -> $hash{$key}\\n";
}

If you want to loop over a hash using reference then

for my $key (keys %{$href}) {
          print "$key => ${$href}{$key}\\n";
}

Tip

${$aref}[3] is too hard to read, so you can write $aref->[3] instead.
${$href}{red} is too hard to read, so you can write $href->{red} instead.

If $aref holds a reference to an array, then $aref->[3] is the fourth element of the array. Don’t confuse this with $aref[3], which is the fourth element of a totally different array, one deceptively named @aref. $aref and @aref are unrelated the same way that $item and @item are.

Similarly, $href->{‘red’} is part of the hash referred to by the scalar variable $href, perhaps even one with no name. $href{‘red’} is part of the deceptively named %href hash.

It’s easy to forget to leave out the ->, and if you do, you’ll get bizarre results when your program gets array and hash elements out of totally unexpected hashes and arrays that weren’t the ones you wanted to use.

 
With the help of references you can construct complex datastructures as:

1) A reference to a list containing references to several lists

+----------\\
|     x     >                      +-->+###########+
+----------/                       |   +"""""""""""+
      |                            |   |    Foo    |
+-----------+                      |   +-----------+
|     O-----+----->+###########+   |   |    ABC    |
+-----------+      +"""""""""""+   |   +-----------+
                   |     O-----+---+
                   +-----------+
                   |     O-----+------>+###########+
                   +-----------+       +"""""""""""+
                   |     O-----+---+   |    BUZ    |
                   +-----------+   |   +-----------+
                                   |   |    VIZ    |
                                   |   +-----------+
                                   |
                                   |
                                   +-->+###########+
                                       +"""""""""""+
                                       |    BUZ    |
                                       +-----------+

2) A hash containing references to lists

+----------\\
|     x     >                 +-->+###########+
+----------/                  |   +"""""""""""+
      |                       |   |    Foo    |
+#########################+   |   +-----------+
+"""""""""""""""""""""""""+   |   |    ABC    |
+-----------\\ +-----------+   |   +-----------+
|    aaa     >|     O-----+---+
+-----------< +-----------+
|    bbb     >|     O-----+------>+###########+
+-----------< +-----------+       +"""""""""""+
|    ccc     >|     O-----+---+   |    BUZ    |
+-----------/ +-----------+   |   +-----------+
                              |   |    VIZ    |
                              |   +-----------+
                              |
                              |
                              +-->+###########+
                                  +"""""""""""+
                                  |    BUZ    |
                                  +-----------+

Creating reference to an anonymous array

To create an anonymous array [ ] brackets are used. For example:

$x = [1, 2, 3];

Here $x is a reference to an anonymous array.

Creating reference to an anonymous hash

To create an anonymous hash curly braces { } are used. For example:

$x = {Name => 'Chankey', Email => 'chankey007@gmail.com'};

Creating reference to an anonymous subroutine

For this just assign subroutine to a scalar variable (reference variable in our case).

$x = sub { print "Welcome to Linux Stall\n" };

Some notations

Consider the example given below

@a = ( [1, 2, 3],
               [4, 5, 6],
	       [7, 8, 9]
);

@a is an array with three elements, and each one is a reference to another array. $a[1] is one of these references. It refers to an array, the array containing (4, 5, 6), and because it is a reference to an array, we can write $a[1]->[2] to get the third element from that array. $a[1]->[2] is the 6. Similarly, $a[0]->[1] is the 2. What we have here is like a two-dimensional array; you can write $a[ROW]->[COLUMN] to get or set the element in any row and any column of the array.

The notation still looks a little cumbersome, so there’s one more abbreviation:

In between two subscripts, the arrow is optional i.e. instead of $a[1]->[2], we can write $a[1][2]; it means the same thing. Instead of $a[0]->[1] = 23, we can write $a[0][1] = 23 ; it means the same thing. Now it really looks like two-dimensional arrays! You can see why the arrows are important. Without them, we would have had to write ${$a[1]}[2] instead of $a[1][2]. For three-dimensional arrays, they let us write $x[2][3][5] instead of the unreadable ${${$x[2]}[3]}[5].

This is all what a newbie should know about reference in Perl.

Android Tethering: Using Android to access internet on your Linux machine

Android tethering Linux

What is Android Tethering?

Android Tethering is a way to access internet on your computer with the help of your Android smartphone. USB and Wi-Fi access point tethering is natively supported from Android Froyo 2.2.

Android tethering Linux

USB tethering

For USB tethering you must have root access to the phone and a USB cable to connect your phone to computer.

Step 1: First of all you will have to enable USB debugging on your Android. Go to Settings -> Applications -> Development -> USB debugging and enable it. After enabling just reboot your phone.

Step 2: Connect your phone to computer using USB cable.

Step 3: Now enable tethering option from your phone. For this go to Settings -> Wireless & Networks -> Internet tethering and enable it.

Step 4: Open up terminal on your computer and run the command given below

chankey@linuxstall:$ ifconfig -a

The output will be like:

eth0      Link encap:Ethernet  HWaddr 40:61:86:B1:E9:33
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:480 (480.0 b)  TX bytes:480 (480.0 b)

usb0      Link encap:Ethernet  HWaddr C2:5A:11:8D:43:F5
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

usb0 is denoting your Android device. If you don’t see it then you will have to load the usbnet module and you can do that using modprobe command as:

chankey@linuxstall:$ modprobe usbnet

Step 5: Now to configure new network device via DHCP use the command given below:

chankey@linuxstall:$ ifconfig usb0 up && dhcpcd usb0

For configuring the new network device using iproute toolkit the command is:

chankey@linuxstall:$ ip link set usb0 up && dhcpcd usb0

For stopping the network sharing the command is:

chankey@linuxstall:$ dhcpcd -x usb0

 

Netcfg

You can use Netcfg to configure USB tethering, for that just add a static ethernet configuration like:

/etc/network.d/usb-tether

CONNECTION='ethernet'
DESCRIPTION='A basic dhcp ethernet connection using iproute'
INTERFACE='usb0'
IP='dhcp'

Unity keyboard Shortcuts

unity keyboard shortcuts

unity keyboard shortcuts

Your Unity keyboard shortcuts documentation is here! Bookmark this page for future reference or download the wallpaper containing all unity keyboard shortcuts, download link in later half of this page.

A “Super” user will make most out of his keyboard with less/no use of mouse as it slows one down. Here we have documented some keyboard shortcuts for Unity which can help you get your task done more efficiently and quickly. Unity shortcuts, well most of them, start with tapping SUPER key. Since 12.04, tapping Entershows up following screen:

unity keyboard shortcuts 12.04

Launcher Shortcuts

The launcher can be started with Super key.
Super can be used along with numbers to invoke or focus an application. Numbers run from top to bottom on dash such as top most icon corresponds to number 1. For example, to open or to set your focus on second icon from top : Super + 1
Using Shift will open the second instant of an application if one is already open.
To open the trash: Super + T
To put focus on Launcher, use Alt + F1. Henceforth Enter will open the application, arrow keys can be used to move focus like they always do.
Terminal window launches open with Ctrl + Alt + T

Dash Shortcuts

Open the dash by tapping Super key. It opens when the key is released and when it is pressed so it might feel a bit slow.
Move to the next lens: Tab (11.10+ only)
Move to the previous lens: Shift + Tab
Dash’s special mode for running commands: Alt + F2
When the dash starts, the focus is on search box. When search results are in, arrow keys can be used to do usual and Enter launches the choice. It also has its own version of “I’m feeling lucky”. When the search is still going on, tapping Enter twice will invoke the first search result.
To open application lens: Super + A
To open Files and Folders: Super + F
For music lens: Super + M(11.10+ only)

Panel Shortcuts

Open the first menu on panel: F10. Arrow keys for moving through menus.
You can get to session menu by hitting F10 followed by left arrow key.
Get out of menus with Esckey.

Window Management Shortcuts

Spread mode: Super + W (It zooms out all windows on all workspaces)
Minimize all windows: Super + D. Restore by hitting it again.
Switch between applications: Alt + Tab
Switching between an application’s windows: Alt + `. It switches only between windows related to that application.

Window placement Shortcuts

Maximize window: Ctrl + Alt + 0
Position window in bottom-left: Ctrl + Alt + 1
Position window in bottom-half: Ctrl + Alt + 2
Position window in bottom-right: Ctrl + Alt + 3
Position window in left side of screen: Ctrl + Alt + 4
Position window in middle of screen: Ctrl + Alt + 5
Position window in right side of screen: Ctrl + Alt + 6
Position window in left top: Ctrl + Alt 7
Position window in top half: Ctrl + Alt + 8
Position window in right top: Ctrl + Alt + 9

Workspace Management Shortcuts

(Expo mode) Zoom out on all windows which makes management easier: Super + s
Expo mode in current workspace only: Shift + Alt + ↑
Change workspace: Ctrl + Alt + ↑/↓/←/→
Position window on new workspace: Ctrl + Alt + Shift +↑/↓/←/→
Lock current screen: Ctrl + Alt + L

Screenshot Shortcuts

Screenshot of current screen: PrtScn
Screenshot of current window: Alt + PrtScn

Wallpaper

These unity keyboard shortcuts can be found in following wallpaper:

unity keyboard shortcuts

Above wallpaper is in English, we also have its Spanish translation:

unity keyboard shortcuts spanish