"; */ ?>

hacking


6
Jan 09

Find USB flash drive device in Linux

Find USB drive in Linux / Unix

Recently I have written a quick “how to” on restoring, formatting a USB flash drive. The “how to” had a lot of hits from different places since then, mostly from GOOGLE, of course, but some from independent bloggers, like my blogging self.

One of such places was www.newlinuxuser.com. Although the guide “saved them” (welcome :)) they had a very constructive critique that one thing the guide missed was how to actually find which device to restore / format.

Hence I decided to write a new little 2 step “how to” that will teach you just that.

Step 1. System Log is your friend, listen to what it has to say…

Imagine you close your eyes, and someone puts an apple in your mouth – would you be able to identify what the heck was put into your mouth? For most people the answer would be “yes”. ( If you’d like to experiment, feel free :). The thing is once you bite on that apple, your brain goes through many lines of code (given that we are written in C), finds that match, and reports:

"The object in your mouth was identified as an Apple - we've had that before.
  I just talked to the stomach, it knows how to digest it."

You would think that your Linux/Unix system is any different? Well, not really.

Right after you insert a USB device into a slot, Linux/Unix will try to read, and identify it. While doing that, it will also assign it to a particular device as “/dev/particular-device”. This device is exactly the information we need, so we can talk to it, and mount it.

Although most people would approach it with running a dmesg, and look at the output, I prefer a more natural OS way to look at things – we’ll look directly in the eye of a System Log!

Let’s use “tail -f”, so we can see real time system log updates:

tail -f /var/log/messages

Now insert your USB drive into a slot and you should see the output similar to:

Dec  5 14:53:19 your-hostname kernel: [81585.308993] usb 4-1: new full speed USB device using uhci_hcd and address 3
Dec  5 14:53:19 your-hostname kernel: [81585.456757] usb 4-1: not running at top speed; connect to a high speed hub
Dec  5 14:53:19 your-hostname kernel: [81585.484884] usb 4-1: configuration #1 chosen from 1 choice
Dec  5 14:53:19 your-hostname kernel: [81585.498817] scsi6 : SCSI emulation for USB Mass Storage devices
Dec  5 14:53:24 your-hostname kernel: [81590.514870] scsi 6:0:0:0: Direct-Access     USB 2.0  USB Flash Drive  0.00 PQ: 0 ANSI: 2
Dec  5 14:53:24 your-hostname kernel: [81590.519874] sd 6:0:0:0: [sdb] 15794175 512-byte hardware sectors (8087 MB)
Dec  5 14:53:24 your-hostname kernel: [81590.522834] sd 6:0:0:0: [sdb] Write Protect is off
Dec  5 14:53:24 your-hostname kernel: [81590.534817] sd 6:0:0:0: [sdb] 15794175 512-byte hardware sectors (8087 MB)
Dec  5 14:53:24 your-hostname kernel: [81590.537814] sd 6:0:0:0: [sdb] Write Protect is off
 
>>>>  Dec  5 14:53:25 your-hostname kernel: [81590.537888]  sdb: sdb1  <---- GOT YOU!
 
Dec  5 14:53:25 your-hostname kernel: [81590.654848] sd 6:0:0:0: [sdb] Attached SCSI removable disk

Note that the USB drive was “connected”, or associated with sdb device

[81590.654848] sd 6:0:0:0: [sdb] 15794175 512-byte hardware sectors (8087 MB)

and more precisely, with sdb1 device

[81590.537888]  sdb: sdb1

And that means we can talk to it! The full name of the guy would be “/dev/sdb1”.

Now let’s greet our friend. Say: “Hi /dev/sdb1”! :)

Step 2. Mount USB drive’s device to the File System.

Just an extra step, in case you need to mount it. If you can’t, and would like to format it, so you can mount it afterwards, read this.

To mount the drive enter this:

sudo mount -t vfat /dev/sdb1 /media/usbdrive/

where “/dev/sdb1” is the name of the device, we found in the step above. “/media/usbdrive/” is the directory that we are going to mount it to. Make sure this directory exists (otherwise create it “sudo mkdir /media/usbdrive/”). And “-t vfat” is asking your Linux/Unix OS to mount this device as a “vfat” (FAT16, FAT32) device.

Many, if not most, USB devices are VFAT, however if you have an NTFS USB hard drive, for example, you can mount it by entering:

sudo mount -t ntfs-3g /dev/sdb1 /media/usbdrive/ -o force

“sudo” in above couple commands comes from mostly Ubuntu way to “run command as a super user”. If you have any other flavor of Linux/Unix, you may want to just run it as a “root” user.

Eat more apples, and good luck!


25
Jun 07

Custom Keyboard Layout in Ubuntu (or just Linux :)

keyboard layout in Ubuntu LinuxSystem -> Preferences -> Keyboard -> Layouts -> Add… Right? It is all good and clean only in case if layouts, that come with Ubuntu (or other Linux), are exactly what you need. But what if you’d like to create your own layout? Or, most of the time, what if layout is ok, but you would like to change a couple of keys around, because you are used to it “that certain way”? Here is how to approach these “what if”s.

The “guy” to talk to is XKB (X KeyBoard), which is responsible for everything that is going on with keyboard(s) under X (GUI Environment).

First, let us find the layout to change/modify/customize. For that we will go to “/usr/share/X11/xkb/symbols”:

user@host:/usr/share/X11/xkb/symbols$ ls
ad      by             epo            hr      kh               mk         pl          th
af      ca             es             hu      kr               mm         pt          tj
al      capslock       eurosign       ie      kz               mn         ro          tr
altwin  cd             fi             il      la               mt         ru          ua
am      ch             fo             in      latam            mv         ru_backup   us
ara     compose        fr             inet    latin            nbsp       se          uz
az      cs             fujitsu_vndr/  iq      level3           nec_vndr/  sgi_vndr/   vn
ba      ctrl           gb             ir      level5           ng         si          xfree68_vndr/
bd      cz             ge             is      lk               nl         sk          za
be      de             gh             it      lt               no         sony_vndr/
bg      digital_vndr/  gr             jp      lv               np         srvr_ctrl
br      dk             group          keypad  macintosh_vndr/  pc         sun_vndr/
bt      ee             hp_vndr/       kg      mao              pk         sy

This is home for all layouts that XKB reads in and follows. That means that if a layout needs to be changed all the changes are written here.

Now let’s change a Russian Phonetic (for example) layout to change a couple of keys around. For that, first, make a backup of the existing Russian layout (that has all Russian Layouts):

sudo cp ru ru_backup

then let’s get to breaking through and customizing it (use your favorite text editor, “vi” here is used as an example):

sudo vi ru
 
// $XKeyboardConfig: xkbdesc/symbols/ru,v 1.11 2006/09/04 20:25:10 svu Exp $
 
// based on
// russian standard keyboard
// AEN aen@logic.ru
// 2001/12/23 by Leon Kanter leon@blackcatlinux.com
// 2005/12/09 Valery Inozemtsev shrek@altlinux.ru
//
// $XFree86: xc/programs/xkbcomp/symbols/ru,v 1.3 2003/02/15 22:27:05 dawes Exp $
 
partial default alphanumeric_keys
xkb_symbols "basic" {
 
    name[Group1]= "Russia";
 
    key    AE01 {    [        1,        exclam     ]    };
    key    AE02 {    [        2,        quotedbl    ]    };
    key    AE03 {    [        3,      numbersign    ]    };
    key    AE04 {    [        4,        asterisk    ]    };
    key    AE05 {    [        5,         colon    ]    };
    key    AE06 {    [        6,         comma    ]    };
    key    AE07 {    [        7,        period    ]    };
    key    AE08 {    [        8,     semicolon    ]    };
    key    AE09 {    [        9,     parenleft    ]    };
    key    AE10 {    [        0,    parenright    ]    };
    key    AE11 {    [        minus,    underscore    ]    };
    key    AE12 {    [        equal,          plus    ]    };
    key    BKSL {    [    backslash,             bar    ]    };
    key    AB10 {    [        slash,      question    ]    };
    key LSGT {        [           slash,             bar      ]       };
 
    key    TLDE {    [     Cyrillic_io,     Cyrillic_IO    ]    };
    key    AD01 {    [ Cyrillic_shorti, Cyrillic_SHORTI    ]    };
    key    AD02 {    [    Cyrillic_tse,    Cyrillic_TSE    ]    };
    key    AD03 {    [      Cyrillic_u,    Cyrillic_U    ]    };
    key    AD04 {    [     Cyrillic_ka,     Cyrillic_KA    ]    };
    key    AD05 {    [     Cyrillic_ie,     Cyrillic_IE    ]    };
    key    AD06 {    [     Cyrillic_en,     Cyrillic_EN    ]    };
    key    AD07 {    [    Cyrillic_ghe,    Cyrillic_GHE    ]    };
    key    AD08 {    [    Cyrillic_sha,    Cyrillic_SHA    ]    };
    key    AD09 {    [  Cyrillic_shcha,  Cyrillic_SHCHA    ]    };
    key    AD10 {    [     Cyrillic_ze,     Cyrillic_ZE    ]    };
    key    AD11 {    [     Cyrillic_ha,     Cyrillic_HA    ]    };
    key    AD12 {    [Cyrillic_hardsign,Cyrillic_HARDSIGN    ]    };
    key    AC01 {    [     Cyrillic_ef,     Cyrillic_EF    ]    };
    key    AC02 {    [   Cyrillic_yeru,   Cyrillic_YERU    ]    };
    key    AC03 {    [     Cyrillic_ve,     Cyrillic_VE    ]    };
    key    AC04 {    [      Cyrillic_a,    Cyrillic_A    ]    };
    key    AC05 {    [     Cyrillic_pe,     Cyrillic_PE    ]    };
    key    AC06 {    [     Cyrillic_er,     Cyrillic_ER    ]    };
    key    AC07 {    [      Cyrillic_o,    Cyrillic_O    ]    };
    key    AC08 {    [     Cyrillic_el,     Cyrillic_EL    ]    };
    key    AC09 {    [     Cyrillic_de,     Cyrillic_DE    ]    };
    key    AC10 {    [    Cyrillic_zhe,    Cyrillic_ZHE    ]    };
    key    AC11 {    [      Cyrillic_e,    Cyrillic_E    ]    };
    key    AB01 {    [     Cyrillic_ya,     Cyrillic_YA    ]    };
    key    AB02 {    [    Cyrillic_che,    Cyrillic_CHE    ]    };
    key    AB03 {    [     Cyrillic_es,     Cyrillic_ES    ]    };
    key    AB04 {    [     Cyrillic_em,     Cyrillic_EM    ]    };
    key    AB05 {    [      Cyrillic_i,    Cyrillic_I    ]    };
    key    AB06 {    [     Cyrillic_te,     Cyrillic_TE    ]    };
    key    AB07 {    [Cyrillic_softsign,Cyrillic_SOFTSIGN    ]    };
    key    AB08 {    [     Cyrillic_be,     Cyrillic_BE    ]    };
    key    AB09 {    [     Cyrillic_yu,     Cyrillic_YU    ]    };
 
    key.type[group1]="TWO_LEVEL";
 
    include "keypad(comma)"
};
 
partial alphanumeric_keys
xkb_symbols "winkeys" {
    include "ru(basic)"
    name[Group1]= "Russia - Winkeys";
    key AE03 {        [               3,      numerosign      ]       };
    key AE04 {        [               4,       semicolon      ]       };
    key AE05 {        [               5,         percent      ]       };
    key AE06 {        [               6,           colon      ]       };
    key AE07 {        [               7,        question      ]       };
    key AE08 {        [               8,        asterisk      ]       };
    key AB10 {        [          period,           comma      ]       };
    key BKSL {        [       backslash,           slash      ]       };
};
 
partial alphanumeric_keys
xkb_symbols "typewriter" {
    include "ru(basic)"
    name[Group1]= "Russia - Typewriter";
    key    TLDE {    [      apostrophe,      quotedbl    ]     };
    key    AE01 {    [       exclam,         1     ]    };
    key    AE02 {    [      numerosign,         2    ]    };
    key    AE03 {    [        slash,         3    ]    };
    key    AE04 {    [    semicolon,         4    ]    };
    key    AE05 {    [        colon,         5    ]    };
    key    AE06 {    [        comma,         6    ]    };
    key    AE07 {    [       period,         7    ]    };
    key    AE08 {    [      underscore,         8    ]    };
    key    AE09 {    [     question,         9    ]    };
    key    AE10 {    [      percent,
        0    ]    };
    key    BKSL {    [    parenleft,    parenright    ]    };
 
    key    AD12 {    [Cyrillic_hardsign,Cyrillic_HARDSIGN    ]    };
    key    AB10 {    [     Cyrillic_io,     Cyrillic_IO    ]    };
};
 
partial alphanumeric_keys
xkb_symbols "phonetic" {
 
    name[Group1]= "Russia - Phonetic";
 
    key    AE01 {    [        1,        exclam     ]    };
    key    AE02 {    [        2,            at    ]    };
    key    AE03 {    [        3,     Cyrillic_io     ]    };
    key    AE04 {    [        4,     Cyrillic_IO    ]    };
    key    AE05 {    [        5, Cyrillic_hardsign       ]    };
    key    AE06 {    [        6, Cyrillic_HARDSIGN    ]    };
    key    AE07 {    [        7,     ampersand    ]    };
    key    AE08 {    [        8,        asterisk    ]    };
    key    AE09 {    [        9,     parenleft    ]    };
    key    AE10 {    [        0,    parenright    ]    };
 
    key    AB09 {    [       period,       greater    ]    };
    key    AB10 {    [        slash,      question    ]    };
    key    AB08 {    [        comma,          less    ]    };
    key    AC10 {    [    semicolon,         colon    ]    };
    key    AC11 {    [      apostrophe,      quotedbl    ]    };
    key    LSGT {    [          bar,     brokenbar    ]    };
 
    key    TLDE {    [     Cyrillic_yu,     Cyrillic_YU    ]    };
    key    LatQ {    [     Cyrillic_ya,     Cyrillic_YA    ]    };
    key    LatZ {    [     Cyrillic_ze,     Cyrillic_ZE    ]    };
    key    LatS {    [     Cyrillic_es,     Cyrillic_ES    ]    };
    key    LatA {    [      Cyrillic_a,    Cyrillic_A    ]    };
    key    LatW {    [     Cyrillic_ve,     Cyrillic_VE    ]    };
    key    LatC {    [    Cyrillic_tse,    Cyrillic_TSE    ]    };
    key    LatX {    [Cyrillic_softsign,Cyrillic_SOFTSIGN    ]    };
    key    LatD {    [     Cyrillic_de,     Cyrillic_DE    ]    };
    key    LatE {    [     Cyrillic_ie,     Cyrillic_IE    ]    };
    key    LatV {    [    Cyrillic_zhe,    Cyrillic_ZHE    ]    };
    key    LatF {    [     Cyrillic_ef,     Cyrillic_EF    ]    };
    key    LatT {    [     Cyrillic_te,     Cyrillic_TE    ]    };
    key    LatR {    [     Cyrillic_er,     Cyrillic_ER    ]    };
    key    LatN {    [     Cyrillic_en,     Cyrillic_EN    ]    };
    key    LatB {    [     Cyrillic_be,     Cyrillic_BE    ]    };
    key    LatH {    [     Cyrillic_ha,     Cyrillic_HA    ]    };
 
    ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
 
};

inside the file we’ll find the layout we are after, which is specified by the following line:

xkb_symbols "phonetic"

after this line all the mapping is done.

Now let’s look at the letters we would like to change keys for:

    key    LatX {    [Cyrillic_softsign,Cyrillic_SOFTSIGN    ]    };
    key    LatH {    [     Cyrillic_ha,     Cyrillic_HA    ]    };
    key    AE12 {    [    Cyrillic_che,    Cyrillic_CHE    ]    };

A single line above means that the “key <such and such> will map to [ small, and capital ] Russian letter”. So to change this all that needs to be done is to re-map them. For example, if we want <LatX> (just a latin X, or ‘X’ key) to map to “Cyrillic_ha, Cyrillic_HA” instead of “Cyrillic_softsign,Cyrillic_SOFTSIGN”, we just need to change it:

    key    LatX {    [     Cyrillic_ha,     Cyrillic_HA    ]    };

Here is how these three letters were changed, so they are more convinient to use as a part of the Russian Phonetic layout from the past:

    key    AE12 {    [Cyrillic_softsign,Cyrillic_SOFTSIGN    ]    };
    key    LatX {    [     Cyrillic_ha,     Cyrillic_HA    ]    };
    key    LatH {    [    Cyrillic_che,    Cyrillic_CHE    ]    };

Now just save the file and exit out from it (in vi it is “:wq”), and restart X (press “Ctrl + Alt + backspace”).

You’ve got yourself a new customized layout now that you can use – enjoy!