PC キーボードのキーを押すと、大まかなキーの位置に基づいた PC スキャン コードが生成されます。たとえば、ドイツ語キーボードの <Z> キーは、英語キーボードの <Y> キーと同じ位置にあるため、同じコードを生成します。ほとんどのキーには 1 バイトのスキャン コードが割り当てられており、残りのキーには頭に 0xe0 が付いた 2 バイトのスキャンコードが割り当てられています。
Workstation Player の内部では、単一の 9 ビットの数値からなる PC スキャン コードを単純化した、v-scan コードと呼ばれるコードを使用しています。v-scan コードは、3 桁の 16 進数として記述されます。最初の桁は 0 か 1 です。たとえば、キーボードの左側の <Ctrl> キーには 1 バイトのスキャン コード(0x1d)が割り当てられ、v-scan コードは 0x01d です。キーボードの右側の <Ctrl> キーのスキャン コードは 2 バイト(0xe0, 0x1d)で、v-scan コードは 0x11d です。
PC 上の XFree86 サーバでは、X キー コードから PC スキャン コード(Workstation Player が使用している v-scan コード)へのマッピングは 1 対 1 で行われます。Workstation Player が XFree86 サーバでホストされており、ローカルの仮想マシンを実行している場合は、X キー コードから v-scan コードへ組み込まれたマッピングを利用します。このマッピングはキーボードの種類には関係なく、ほとんどの言語に対して有効なはずです。XFree86 サーバやローカル サーバを使用しないケースでは、Workstation Player がキーボードに固有の表を利用して v-scan コードに keysyms をマッピングしなければなりません。
X サーバは、X キー コードと keysym を含む、2 段階のキー エンコードを使用しています。X キー コードは 1 バイト値です。一方、キーへのキー コードの割り当ては、X サーバの実装と物理キーボードによって異なります。このため一般的に、X アプリケーションはキー コードを直接使用することができません。代わりに、キー コードは、Space、Escape、x、2 といった名前が設定された keysyms にマッピングされます。X アプリケーションを利用し、XChangeKeyboardMapping()
という関数または xmodmap というプログラムを使用してこのマッピングを制御できます。また、キーボードのマッピングを調べるには、xev コマンドを使用できます。このコマンドは、そのウィンドウに入力されたキーのキー コードと keysyms を表示します。
キー コードは物理キーに大まかに対応しており、keysyms はキーの上に表示されている記号に対応したものです。たとえば、PC 上で稼動する XFree86 サーバを例に取ると、ドイツ語キーボードの <Z> キーは英語キーボードの <Y> キーと同じキー コードを持ちます。ドイツ語の <Z> keysyms は英語の <Y> keysyms ではなく、<Z> keysyms と同じです。