Linux: Finding ASCII code of a key
Tags: linux, cli, tutorial, beginners
Published: 2024-04-05 11:54:16


You can use `showkey` command from `kbd` package to quickly find out an ASCII code of a key:

```
showkey -a
```

After that you you can press any number of keys to find out their ASCII codes (you can press CTRL+d to terminate the program).

Note: `kbd` package should be installed out-of-the-box on most Linux distributions, if you don't have it for some reason, you can install it with:
```
# deb-based (Debian, Ubuntu, Mint, Raspbian, Kali, etc.)
apt install kbd

# rpm-based (Fedora, CentOS, etc.)
dnf install kbd

# Arch
pacman -S kbd

# Alpine
apk add kbd
```

## Alternatives

Alternatively, you can use the man page of `ascii` command (this should work both on Linux on BSD):
```
man ascii
```

I'll include the tables here for convenience:
```text
       Oct   Dec   Hex   Char                      │ Oct   Dec   Hex   Char
       ────────────────────────────────────────────┼───────────────────────────
       000   0     00    NUL '\0' (null character) │ 100   64    40    @
       001   1     01    SOH (start of heading)    │ 101   65    41    A
       002   2     02    STX (start of text)       │ 102   66    42    B
       003   3     03    ETX (end of text)         │ 103   67    43    C
       004   4     04    EOT (end of transmission) │ 104   68    44    D
       005   5     05    ENQ (enquiry)             │ 105   69    45    E
       006   6     06    ACK (acknowledge)         │ 106   70    46    F
       007   7     07    BEL '\a' (bell)           │ 107   71    47    G
       010   8     08    BS  '\b' (backspace)      │ 110   72    48    H
       011   9     09    HT  '\t' (horizontal tab) │ 111   73    49    I
       012   10    0A    LF  '\n' (new line)       │ 112   74    4A    J
       013   11    0B    VT  '\v' (vertical tab)   │ 113   75    4B    K
       014   12    0C    FF  '\f' (form feed)      │ 114   76    4C    L
       015   13    0D    CR  '\r' (carriage ret)   │ 115   77    4D    M
       016   14    0E    SO  (shift out)           │ 116   78    4E    N
       017   15    0F    SI  (shift in)            │ 117   79    4F    O
       020   16    10    DLE (data link escape)    │ 120   80    50    P
       021   17    11    DC1 (device control 1)    │ 121   81    51    Q
       022   18    12    DC2 (device control 2)    │ 122   82    52    R
       023   19    13    DC3 (device control 3)    │ 123   83    53    S
       024   20    14    DC4 (device control 4)    │ 124   84    54    T
       025   21    15    NAK (negative ack.)       │ 125   85    55    U
       026   22    16    SYN (synchronous idle)    │ 126   86    56    V
       027   23    17    ETB (end of trans. blk)   │ 127   87    57    W
       030   24    18    CAN (cancel)              │ 130   88    58    X
       031   25    19    EM  (end of medium)       │ 131   89    59    Y
       032   26    1A    SUB (substitute)          │ 132   90    5A    Z
       033   27    1B    ESC (escape)              │ 133   91    5B    [
       034   28    1C    FS  (file separator)      │ 134   92    5C    \  '\\'
       035   29    1D    GS  (group separator)     │ 135   93    5D    ]
       036   30    1E    RS  (record separator)    │ 136   94    5E    ^
       037   31    1F    US  (unit separator)      │ 137   95    5F    _
       040   32    20    SPACE                     │ 140   96    60    `
       041   33    21    !                         │ 141   97    61    a
       042   34    22    "                         │ 142   98    62    b
       043   35    23    #                         │ 143   99    63    c
       044   36    24    $                         │ 144   100   64    d
       045   37    25    %                         │ 145   101   65    e
       046   38    26    &                         │ 146   102   66    f
       047   39    27    '                         │ 147   103   67    g
       050   40    28    (                         │ 150   104   68    h
       051   41    29    )                         │ 151   105   69    i
       052   42    2A    *                         │ 152   106   6A    j
       053   43    2B    +                         │ 153   107   6B    k
       054   44    2C    ,                         │ 154   108   6C    l
       055   45    2D    -                         │ 155   109   6D    m
       056   46    2E    .                         │ 156   110   6E    n
       057   47    2F    /                         │ 157   111   6F    o
       060   48    30    0                         │ 160   112   70    p
       061   49    31    1                         │ 161   113   71    q
       062   50    32    2                         │ 162   114   72    r
       063   51    33    3                         │ 163   115   73    s
       064   52    34    4                         │ 164   116   74    t
       065   53    35    5                         │ 165   117   75    u
       066   54    36    6                         │ 166   118   76    v
       067   55    37    7                         │ 167   119   77    w
       070   56    38    8                         │ 170   120   78    x
       071   57    39    9                         │ 171   121   79    y
       072   58    3A    :                         │ 172   122   7A    z
       073   59    3B    ;                         │ 173   123   7B    {
       074   60    3C    <                         │ 174   124   7C    |
       075   61    3D    =                         │ 175   125   7D    }
       076   62    3E    >                         │ 176   126   7E    ~
       077   63    3F    ?                         │ 177   127   7F    DEL
```

Compact tables in hex and decimal:
```text
          2 3 4 5 6 7       30 40 50 60 70 80 90 100 110 120
        -------------      ---------------------------------
       0:   0 @ P ` p     0:    (  2  <  F  P  Z  d   n   x
       1: ! 1 A Q a q     1:    )  3  =  G  Q  [  e   o   y
       2: " 2 B R b r     2:    *  4  >  H  R  \  f   p   z
       3: # 3 C S c s     3: !  +  5  ?  I  S  ]  g   q   {
       4: $ 4 D T d t     4: "  ,  6  @  J  T  ^  h   r   |
       5: % 5 E U e u     5: #  -  7  A  K  U  _  i   s   }
       6: & 6 F V f v     6: $  .  8  B  L  V  `  j   t   ~
       7: ' 7 G W g w     7: %  /  9  C  M  W  a  k   u  DEL
       8: ( 8 H X h x     8: &  0  :  D  N  X  b  l   v
       9: ) 9 I Y i y     9: '  1  ;  E  O  Y  c  m   w
       A: * : J Z j z
       B: + ; K [ k {
       C: , < L \ l |
       D: - = M ] m }
       E: . > N ^ n ~
       F: / ? O _ o DEL              
```


        
<hr><small>
Note: This is a snapshot of the wiki page from <a href="https://onethingwell.dev">OneThingWell.dev wiki</a>, you can find the latest, fully formatted version here: <a href="https://onethingwell.dev/linux-finding-ascii-code-of-a-key">onethingwell.dev/linux-finding-ascii-code-of-a-key</a>.
</small>