When using a virtual terminal (TTY) on Linux, there are certain keybindings that are redundant on modern keyboards. For example, Ctrl+J and Enter do the same thing (Linefeed).
I would like keys like Enter to retain their current mapping, freeing up stuff like Ctrl+J for something else.
On Raspbian Lite (basically, Debian), is it possible to map Ctrl+J to something different to Enter?
There are five man pages you should start with when learning about keymaps:
See keymaps(5) for defining custom keymap files.
See dumpkeys(1) to explore the state of the current keymap.
See showkey(1) to detect which keycodes your keyboard emits.
See loadkeys(1) to load a different keymap into the kernel.
See install-keymap(8) to persistently update the system keymap.
Note: This information relates to the virtual terminals that the kernel provides. Some things are different with X (see XKB).
Related
I would like to inquire if there is a program in Linux that we can use to assign new keyboard shortcut per application. For example, if I'm in FeatherPad I would like to assign Super+S to save. If I'm in terminal, I would like to use Super+V to paste.
Or a program that cab map/assign new shortcut and translate that to an existing shortcut. If in terminal I can paste with Shift+Insert then I would like to map Super+V to Shift+Insert
The closest analogy would be a program like Autohotkey in Microsoft Windows. How do I do this in Linux Desktop environment regardless it is Gnome2/Unity/XFCE etc. ?
There used to be a way to do this called "custom accelerators" or "editable accelerators". It used to be supported in GNOME 2 and XFCE (maybe in others). But since the move to gtk3, this functionality seems to have been removed in GTK-based desktop environments.
In KDE/Plasma, you can use System Settings -> Shortcuts -> Global Shortcuts and then the plus symbol to add specific shortcuts that only apply to certain applications, but unfortunately, not all applications support it.
In FeatherPad itself, there should be Options -> Preferences -> Shortcuts, but I've had no luck getting it to register any shortcut consisting of just Super and a key.
I'm unfamiliar with Autohotkey but it seems that AutoKey is sometimes mentioned as an alternative on Linux?
I have Linux (Backtrack5) running as guest operating system in IOS.
There seems to be some problems with certain keys, I can't type the # sign.. instead, it gives 2 (in superscript).
I have tried hex (%40) but it won't compile.
I have reinstalled it with another keyboard layouts but problem reproduces.
Is there a file where i can reconfigure certain keys?
I am afraid I may sound trivial, but maybe this is your case.It might be that the keymap your system loads by default does not match the one your physical keyboard actually has.
You can change the keyboard layout you're using with setxkbmap it Return typed in a console in your graphical environment (X11), be it under KDE, GNOME, or what you have. With that command you would use an Italian keyboard layout, it looks like the two-letter code for a Danish one is da.
If you're not working with a graphical environment you can set your keyboard layout with loadkeys it Return
My keyboard has two languages, English and other. But in xterm I can write only in other language, and I can't replace the language in any way (alt-lshift, the regular way, or in the gui). With shift key I can write upper case (with caps lock it doesn’t work).
The Cygwin guides on the internet referrals me to xkb layout files, that doesn't existing in my computer at all.
I open the xterm from the icon of Xwin.
Thank you.
Since this is an XTerm running in the Cygwin X server, the X server is doing all the keyboard input translation, independently from the keyboard translation Windows does for other programs (the X server reads the raw keyboard input from the device). So you have to use the X11 methods of changing keyboard layouts. Into your .xinitrc or .xprofile (I can't remember which one Cygwin uses) put the following command
setxkbmap us
To load the US keyboard layout. You can type it also from your xterm when you need it. Read the manpage of setxbmap for details.
The man page says vim -X disables clipboard and window title operation. Is that all we get for vim connecting to X?
I find it a bit surprising, since the default settings slow down vim's startup significantly for me, and I've never needed the clipboard/window title behavior.
This is not gvim, by the way.
My educated guess would be, that it's because most people nowadays use terminal emulators in graphical environments, so it would be useful to behave like nice citizen of such an environment, providing more of a consistency in how various applications look or work.
As a bonus it's more vim-like to use * register for interrogating clipboard.
And more foolproof. I remember graphical terminal emulators where the only way to select text was the old fashioned mouse selection. Given that vim buffer in terminal would not scroll when you selected part of the terminal (as technically selection occurred outside vim in the realm of terminal emulator, and vim was not even aware it's currently taking place) it would not be possible to copy to clipboard anything spanning more than screen could currently hold. And even then it might not work the way you'd want depending on line wrapping settings.
But that is not the problem if editor has connection to system clipboard. Just copy any text you like to * register in the vim-way, and then you have it in system clipboard.
It's still just my speculation.
Is there a way to map Cmd+C to Copy in linux? (instead of Ctrl+C)
Would be nice if I could also have the emacs style ones, like Ctrl+B to move left by one character.
Is there a way, on Linux/X, to map certain key combos to other key combos?
In the tradition of all open source projects, there's not a way, there are several. At the lowest level you've got kernel keybindings, which is probably not what you want. At the X server level you've got xkb with its myriad utilities. And then it seems that every window manager - gnome, kde, xfce or other - also has a keymapping utility. xkb seems to have lots of utils and such around it, and is likely more complete than any random window manager's keymapping utils, so I'd look at that first.
KDE 3 is probably the most flexible here; there's a pre-defined keyboard shortcut scheme named "Mac Scheme". You can set it through KControl Control Center > Regional & Accessibility > Keyboard Shortcuts or kcmshell keys and it will have effect on almost all KDE applications immediately. You might miss some of those Emacs-like "Ctrl-*" shortcuts that OS X has, but that aside, it works well (as long as your X modifiers are mapped correctly). And if it's not to your liking, it's easily customizable.
You can also set Control Center > Desktop > Behavior to enable a Mac OS-like menubar; all KDE applications will then share a menubar at the top of the screen instead of being individually attached to each window.
Update 02/03/2020
Kinto has now been rewritten in C for Ubuntu/Debian systems using x11. It also uses json config files, making it easier to manage and extend to other applications than just terminals. The app no longer maps to Super in the Terminal apps, it will now properly map to Ctrl+Shift to create the exact same feel as having a Cmd key.
Please checkout the latest release.
https://github.com/rbreaves/kinto
The main change to allow for the Super = Ctrl+Shift change is in this symbols file.
default partial xkb_symbols "mac_levelssym" {
key <LWIN> {
repeat= no,
type= "ONE_LEVEL",
symbols[Group1]= [ Hyper_L ],
actions[group1]=[ SetMods(modifiers=Shift+Control) ]
};
key <RWIN> {
repeat= no,
type= "ONE_LEVEL",
symbols[Group1]= [ Hyper_R ],
actions[group1]=[ SetMods(modifiers=Shift+Control) ]
};
};
Pjz's answer is correct in saying that an xkb solution would be ideal, sadly few have taken that route, most likely due to the difficulty of learning xkb and it seems many have gone the route of using Xmodmap files which is being deprecated while we are on our way to Wayland.
This answer may be several years too late, but here it is any ways.
Kinto is a tool I recently created that will address this problem and does so by using xkb and by listening to what app you are currently using, as it also changes the keymap while using terminals so the mac like experience can be consistent.
https://github.com/rbreaves/kinto
https://medium.com/#benreaves/kinto-a-mac-inspired-keyboard-mapping-for-linux-58f731817c0
Here's a Gist as well, if you just want to see what is at the heart of it all, it will not alternate your keymap when needed though. The Gist also does not include custom xkb keymap files that setup macOS style cursors/word-wise manipulations that use Cmd and the arrow keys.
https://gist.github.com/rbreaves/f4cf8a991eaeea893999964f5e83eebb
Edit: Posting the contents of the gist as well. I cannot realistically post the contents of Kinto.
# permanent apple keyboard keyswap
echo "options hid_apple swap_opt_cmd=1" | sudo tee -a /etc/modprobe.d/hid_apple.conf
update-initramfs -u -k all
# Temporary & instant apple keyboard keyswap
echo '1' | sudo tee -a /sys/module/hid_apple/parameters/swap_opt_cmd
# Windows and Mac keyboards - GUI (Physical Alt is Ctrl, Physical Super is Alt, Physical Ctrl is Super)
setxkbmap -option;setxkbmap -option altwin:ctrl_alt_win
# Windows and Mac keyboards - Terminal Apps (Physical Alt is Super, Physical Super is Alt, Physical Ctrl is Ctrl)
setxkbmap -option;setxkbmap -option altwin:swap_alt_win
#
# If you want a systemd service and bash script to help toggle between
# GUI and Terminal applications then look at project Kinto.
# https://github.com/rbreaves/kinto
#
# Note: The above may not work for Chromebooks running Linux, please look
# at project Kinto for that.
#
# If anyone would like to contribute to the project then please do!
#
You'll get almost all of the way there if you switch Cmd and Ctrl
xmodmap -e "keycode 63 = Control_L"
That way Cmd will be Control. No other keys will be swapped
Edited: I forgot the "-e"