Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

This is the biggest thing keeping me from enjoying Ubuntu/Linux.

Ideally I'd like to just be able to run my AutoHotKey script on Ubuntu, but I didn't have much luck getting that working with Wine.

Here's what I'm doing in AHK (using extra modifiers also works, Shift+Alt+l is Shift+right).

!l:: Send, {Right}
+!l:: Send, +{Right}
^!l:: Send, ^{Right}
^+!l:: Send, ^+{Right}

I tried AutoKey, but it wasn't consuming input, remapping Alt + I to right arrow key worked, but it still executed Alt + I, which sometimes selects an item from the application menu.

The closest I got was xbindkeys for setting up hotkeys, this seems to work great. And xvkbd for simulating input; this part is really buggy; it doesn't work in all programs, and causes me to lose focus a lot, among other issues.

For anyone wondering what I'm trying to do: I use I J K L as arrow keys while Alt is down.

share|improve this question
    
Hey Stephen, i'm looking for exactly the same thing. Have you succeeded in doing this? –  lolmaus Dec 28 '13 at 0:03
add comment

3 Answers

I've never used xvkbd, but there are two other great programs for simulating keyboard input that I like and use. One is xte and the other is xdotool.

sudo apt-get install xautomation xdotool  

Both xdotool and xte are very similar, but since I use xte the most I'll go into that one.

xte:

The most basic syntax for xte is:

xte 'command key/mousebutton/xyCoordinates'

xte can do a lot more than just create keyboard input though, it can also move your mouse and simulate mouse button presses, among others things.

Syntax examples:

  • To call a single key press: xte 'key keyName'

  • To call a key combination: xte 'keydown keyName' 'keydown secondKeyName' 'keyup keyName' 'keyup secondKeyName

  • To call a mouse button: xte 'mouseclick buttonNumber' (You can find button numbers through xev)

  • To move the mouse: xte 'mousemove xCoordinate yCoordinate'

  • And more! Read man xte

Keynames:

Here are a list of key names (other than the obvious ones):

Home
Left
Up
Right
Down
Page_Up
Page_Down
End
Return
BackSpace
Tab
Escape
Delete
Shift_L
Shift_R
Control_L
Control_R
Meta_L
Meta_R
Alt_L
Alt_R
Multi_key  
Super_L  
Super_R

Reading:

You might also be interested in reading:

How can I change what keys on my keyboard do?

How do I remap certain keys?

share|improve this answer
    
This looks good but it's not working with xbindkeys. When xte 'key a' is called from xbindkeys it just makes my cursor flash when I press my hotkey. xte 'key a' in the command line works. gnome-terminal called from xbindkeys works. I'm not sure where the problem is. –  Stephen Sarcsam Kamenar May 1 '13 at 22:46
    
It really don't seem like xte is trying to send the key event to the focused window when called from xbindkeys... –  Stephen Sarcsam Kamenar May 1 '13 at 22:48
    
@StephenSarcsamKamenar I myself have had some trouble, but from my experience that has been xbindkeys problem.. For me I have to press the key combination at exactly the same time to get xbindkeys to send the command. YMMV. –  Seth May 2 '13 at 2:52
    
Maybe an xbindkeys problem; xdotool worked with it, but when I held down a key, it would never repeat it. What are good alternatives to xbindkeys? –  Stephen Sarcsam Kamenar May 2 '13 at 4:19
1  
@StephenSarcsamKamenar Xmodmap is explained in this answer as well as this one. That's what I'd use if xbindkeys didn't preform well enough (which it doesn't with xte.. at least for me.) –  Seth May 3 '13 at 0:44
show 1 more comment

Take a look at the Robot class in java:

http://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html

example code:

http://alvinalexander.com/java/java-robot-class-example-mouse-keystroke

share|improve this answer
2  
The links you mentioned here may answer the Question precisely but you should mention the answer or part of the answer. Thank you. –  raaz Jun 16 '13 at 2:48
add comment

This reminds me of some homework in C - where I simulated keyboard output with a trivial listing (as beginner 10 years ago) like here (you could change it into keyboard for input one ) - This post is meant as example to use ASCII-Codes :


/**/
/*                   output of keyboard-ciphers from 32 to 255                           */
/*                   with help of  ASCII-Codes                                          */
/**/

/* #include (stdio.h) */

int ordnungszahl;
int zeilenzahl;

int main(void)
{
     printf("\n");

     for (ordnungszahl=32;ordnungszahl<48;ordnungszahl++)
        printf(" %d  ",ordnungszahl);
        for (zeilenzahl=32;zeilenzahl<48;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        printf("\n");
        printf("\n");

     for (ordnungszahl=48;ordnungszahl<64;ordnungszahl++)
        printf(" %d  ",ordnungszahl);
        for (zeilenzahl=48;zeilenzahl<64;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        printf("\n");
        printf("\n");

     for (ordnungszahl=64;ordnungszahl<80;ordnungszahl++)
        printf(" %d  ",ordnungszahl);
        for (zeilenzahl=64;zeilenzahl<80;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        printf("\n");
        printf("\n");

     for (ordnungszahl=80;ordnungszahl<96;ordnungszahl++)
        printf(" %d  ",ordnungszahl);
        for (zeilenzahl=80;zeilenzahl<96;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        printf("\n");
        printf("\n");

     for (ordnungszahl=96;ordnungszahl<100;ordnungszahl++)
        printf(" %d  ",ordnungszahl);
        if (ordnungszahl==100)
        printf("%d  ",ordnungszahl);
        for (ordnungszahl=101;ordnungszahl<112;ordnungszahl++)
        printf("%d  ",ordnungszahl);
        printf("\n");
        for (zeilenzahl=96;zeilenzahl<100;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        if (zeilenzahl==100)
        printf("  %c  ",zeilenzahl);
        for (zeilenzahl=101;zeilenzahl<112;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        printf("\n");
        printf("\n");

     for (ordnungszahl=112;ordnungszahl<128;ordnungszahl++)
        printf("%d  ",ordnungszahl);
        for (zeilenzahl=112;zeilenzahl<128;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        printf("\n");
        printf("\n");

     for (ordnungszahl=128;ordnungszahl<144;ordnungszahl++)
        printf("%d  ",ordnungszahl);
        for (zeilenzahl=128;zeilenzahl<144;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        printf("\n");getchar();

     for (ordnungszahl=144;ordnungszahl<160;ordnungszahl++)
        printf("%d  ",ordnungszahl);
        for (zeilenzahl=144;zeilenzahl<160;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        printf("\n");
        printf("\n");

     for (ordnungszahl=160;ordnungszahl<176;ordnungszahl++)
        printf("%d  ",ordnungszahl);
        for (zeilenzahl=160;zeilenzahl<176;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        printf("\n");
        printf("\n");

     for (ordnungszahl=176;ordnungszahl<192;ordnungszahl++)
        printf("%d  ",ordnungszahl);
        for (zeilenzahl=176;zeilenzahl<192;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        printf("\n");
        printf("\n");

     for (ordnungszahl=192;ordnungszahl<208;ordnungszahl++)
        printf("%d  ",ordnungszahl);
        for (zeilenzahl=192;zeilenzahl<208;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        printf("\n");
        printf("\n");

     for (ordnungszahl=208;ordnungszahl<224;ordnungszahl++)
        printf("%d  ",ordnungszahl);
        for (zeilenzahl=208;zeilenzahl<224;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        printf("\n");
        printf("\n");

     for (ordnungszahl=224;ordnungszahl<240;ordnungszahl++)
        printf("%d  ",ordnungszahl);
        for (zeilenzahl=224;zeilenzahl<240;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        printf("\n");
        printf("\n");

     for (ordnungszahl=240;ordnungszahl<256;ordnungszahl++)
        printf("%d  ",ordnungszahl);
        for (zeilenzahl=240;zeilenzahl<256;zeilenzahl++)
        printf("  %c  ",zeilenzahl);
        printf("\n");
        printf("\n");

    return 0;
 }
share|improve this answer
    
Can you translate this into English at all? –  Seth Jun 21 '13 at 20:15
    
@Seth yes - wait, it is weekend now - I will translate it now in the night : ordnungszahl=main-number resp. arrangement-number and zeilenzahl=line-number –  dschinn1001 Jun 21 '13 at 23:14
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.