Compare commits

...

30 Commits

Author SHA1 Message Date
Ben Reaves
87ca8e7566 Merge pull request #75 from rbreaves/hotfix
- Recompiled kintox11.c a 2nd time
2020-03-30 18:49:20 -05:00
Ben Reaves
0e4160622f - Recompiled kintox11.c a 2nd time 2020-03-30 18:47:10 -05:00
Ben Reaves
564360e9fa Merge pull request #73 from rbreaves/hotfix
- Recompiled binary with static json-c
2020-03-30 17:25:02 -05:00
Ben Reaves
91e692c76b - Recompiled binary with static json-c 2020-03-30 17:24:23 -05:00
Ben Reaves
6c46696bd4 Merge pull request #71 from rbreaves/hotfix
- Fixed BadWindow errors caused by Destroy and UnmapNotify in Xlib
2020-03-30 16:25:22 -05:00
Ben Reaves
40c8d20513 - Fixed BadWindow errors caused by Destroy and UnmapNotify in Xlib 2020-03-30 16:10:00 -05:00
Ben Reaves
6b6e448e76 Updated readme with arrows to make it more clear. 2020-03-29 01:26:29 -05:00
Ben Reaves
f73a2c8420 Updated readme to include new animation 2020-03-29 00:52:18 -05:00
Ben Reaves
153c5e7b91 Merge pull request #66 from rbreaves/hotfix
- Fixes Kinto startup delay on cold boots. Closes #65
2020-03-28 15:57:45 -05:00
Ben Reaves
548e248515 - Fixes Kinto startup delay on cold boots. Closes #65 2020-03-28 15:55:33 -05:00
Ben Reaves
4a51232b9d - Cleaning up readme 2020-03-17 16:32:19 -05:00
Ben Reaves
4da8f97bf7 - Reorganized Readme 2020-03-17 16:31:18 -05:00
Ben Reaves
bfd363107d - Updated readme with more info on arch 2020-03-17 16:29:19 -05:00
Ben Reaves
6a2948e8a5 - Updated readme 2020-03-17 16:27:01 -05:00
Ben Reaves
16d5531035 - Updated readme w/ upgrade info. Closes ticket #60 2020-03-12 11:51:28 -05:00
Ben Reaves
5870f6b987 Merge branch 'hotfix' 2020-03-10 13:25:40 -05:00
Ben Reaves
fd2234fae4 - Remove xkbcomp error message that has no impact 2020-03-10 11:57:54 -05:00
Ben Reaves
36740e4b3e Merge pull request #55 from rbreaves/hotfix
- Adds ibus-setup & Epiphany. Closes issue #53
2020-03-09 12:22:47 -05:00
Ben Reaves
7c74dcca71 - Added package install of ibus for manjaro 2020-03-09 12:14:49 -05:00
Ben Reaves
8827b37ef3 Merge branch 'master' into hotfix 2020-03-09 11:29:14 -05:00
Ben Reaves
6631cd25a9 - Added ibus-setup fix for some distros and added Epiphany to chrome 2020-03-09 11:29:09 -05:00
Ben Reaves
c5ff1f2513 - Revisions to readme 2020-03-06 15:29:02 -06:00
Ben Reaves
f0851a949c - Typo correction 2020-03-06 15:26:07 -06:00
Ben Reaves
332607765e Updated readme, how to add setxkbmap options 2020-03-06 15:24:36 -06:00
Ben Reaves
7e676938ee Merge pull request #51 from rbreaves/hotfix
- Added capslock swap option to mac_gui
2020-03-06 14:23:37 -06:00
Ben Reaves
7a706305c1 - Added capslock swap option to mac_gui 2020-03-06 14:14:46 -06:00
Ben Reaves
e7f0db4107 - Updated readme 2020-03-06 13:14:17 -06:00
Ben Reaves
031eaf7e9f Updated Readme with uninstall info 2020-03-05 23:42:09 -06:00
Ryan Reaves
40b521ce09 Merge branch 'hotfix' 2020-02-25 16:40:51 -06:00
Ryan Reaves
c5f1764dfa - Added both x11 checks to further compatibility 2020-02-25 16:39:47 -06:00
10 changed files with 190 additions and 72 deletions

View File

@@ -1,3 +1,8 @@
hidden partial modifier_keys
xkb_symbols "swapescape" {
key <CAPS> { [ Escape ] };
key <ESC> { [ Caps_Lock ] };
};
default partial xkb_symbols "mac_levelssym" {
// LEFT to Begin Line or Beginning of word
replace key <LEFT> {

144
README.md
View File

@@ -1,11 +1,11 @@
# Kinto
![kinto_carrot](https://user-images.githubusercontent.com/10969616/77842401-4744b500-7157-11ea-854a-d7dec6f9a250.gif)
![alt text](https://raw.githubusercontent.com/rbreaves/kinto/master/Kinto.png)
[![GitHub release](https://img.shields.io/github/release/rbreaves/kinto.svg)](https://github.com/rbreaves/kinto/releases/latest)
![alt text](https://github.com/rbreaves/kinto/blob/master/splash.png)
\- Type in Linux like it's a Mac. \-
Seamless copy and paste with all apps and terminals. Also the only linux remapper that is aware of your cursor/caret status - meaning it avoids shortcut conflicts within an app versus wordwise shortcuts when a text field is in use.
@@ -14,9 +14,9 @@ Seamless copy and paste with all apps and terminals. Also the only linux remappe
Kinto works for standard Windows, Apple and Chromebook keyboards. The following however describes the dynamic rebinding based on a standard Windows keyboard. (Alt location is Cmd for Apple keyboards)
- Normal apps - Alt will be Ctrl, Win/Super will be Alt, Ctrl will be Win/Super
- Normal apps - Alt Ctrl, Win/Super Alt, Ctrl Win/Super
- Terminal apps - Alt will be Ctrl+Shift, Win/Super will be Alt, Ctrl will be Ctrl
- Terminal apps - Alt Ctrl+Shift, Win/Super Alt, Ctrl Ctrl
- Cursor/word-wise shortcut keys have been added to align with macOS keyboard shortcuts.
@@ -28,13 +28,11 @@ Kinto works for standard Windows, Apple and Chromebook keyboards. The following
- IBus*
- Fedora/RHEL/Manjaro/Arch/Debian/Ubuntu based distro 16.04+
If you need kintox11 recompiled for your distro please let me know and I will add a binary for your distro if my binary fails.
You can also attempt to compile kintox11.c on your system as well, but you will need to compile and install json-c first as its libraries will be required to compile and run the program.
Binary is included and will be installed, but you can also compile kintox11.c on your system. You will need to compile and install json-c first as its libraries will be required to compile and run the program.
*IBus is needed to support wordwise during browser app usage as the keymap will need to change slightly depending if the cursor/caret is on screen waiting for input. Setup.py will set it but you can manually set it as well or check your current Input Method.
To confirm navigate to your "Language Support" and set "Keyboard input method system:" to IBus for full word-wise support with web browsers.
On most distros you can confirm navigate to your "Language Support" and set "Keyboard input method system:" to IBus for full word-wise support with web browsers.
Wayland support is planned, but not ready yet.
@@ -57,8 +55,104 @@ sudo apt install python3
./setup.py
```
To Uninstall Kinto
```
./uninstall.sh
```
## Other Notes Related to Install
**Manjaro with Gnome there are issues.**
Please see this ticket for more information.
https://github.com/rbreaves/kinto/issues/59
https://wiki.archlinux.org/index.php/IBus
**For other Arch based distros.**
Append the following and logoff and back on, but only after running setup.py to install all packages and the kinto service. Please report if there are any difficulties.
nano ~/.bashrc
```
export GTK_IM_MODULE=xim
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=xim
```
## How to Upgrade Kinto
Simply bring down the latest in either the master branch or dev, but dev is sometimes in flux as new features are being developed. Then you can re-run the setup.py installer, it will stop the service and re-install Kinto.
Note: If you have made any custom changes to ~/.xkb or ~/.config/kinto then you will need to backup or rename those directories before running an update.
```
git pull origin master
./setup.py
```
## How to Control Kinto
Under systemd this is how you control Kinto.
Status
```
systemctl --user status keyswap
```
Stop (your keymap will return to normal)
```
systemctl --user stop keyswap
```
Start
```
systemctl --user start keyswap
```
Restart
```
systemctl --user restart keyswap
```
Enable
```
systemctl --user enable keyswap
```
Disable
```
systemctl --user disable keyswap
```
## How to Add Setxkbmap Option inside Kinto
To summarize you'll need to pull the partial out of the symbols file the option resides in and then add that to the mac_gui file and lastly reference it in the keymap file(s) you want it in.
symbols directory
```
/usr/share/X11/xkb/symbols/
```
symbols file
```
~/.xkb/symbols/mac_gui
```
keymap files
```
~/.xkb/keymap/kbd.mac.gui
~/.xkb/keymap/kbd.mac.term
```
A more detailed explaination is here.
https://github.com/rbreaves/kinto/issues/50#issuecomment-595953373
## How to Add or Change keymaps for Applications
Note: All of the following is already done in Kinto (but may also change as improvements are made). The following is purely for documentation and example sake as they are real examples of how to leverage the json config to support additional keymaps.
**First it is important to understand how Kinto operates.**
1. It listens for any focus/active window changes
@@ -323,40 +417,6 @@ You can also add additional Desktop Environment related tweaks to user_config.js
}
```
## How to Control Kinto
Under systemd this is how you control Kinto.
Status
```
systemctl --user status keyswap
```
Stop (your keymap will return to normal)
```
systemctl --user stop keyswap
```
Start
```
systemctl --user start keyswap
```
Restart
```
systemctl --user restart keyswap
```
Enable
```
systemctl --user enable keyswap
```
Disable
```
systemctl --user disable keyswap
```
## Learning macOS style hotkeys on Linux
You can use websites like https://www.shortcutfoo.com in Google Chrome while using the terminal style keymap, but Firefox is not compatible due to detecting "cmd" as keycode 224. Chrome detects Win/Super/Cmd as keycode 91 on all OS's.

View File

@@ -9,8 +9,8 @@
"type":"windows",
"active": false,
"description":"Standard Windows 104 Keyboards",
"gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY",
"term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY",
"gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen",
"term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen",
"xkb_symbols_gui":"+altwin(ctrl_alt_win)+mac_gui(mac_levelssym)",
"xkb_symbols_term":"+altwin(swap_alt_win)+mac_term(mac_win)+mac_term(mac_global)",
"xkb_types_gui":"+mac_gui(addmac_levels)",
@@ -22,8 +22,8 @@
"type":"mac",
"active": false,
"description":"Standard Mac Keyboards with Apple driver",
"gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY",
"term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY",
"gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen",
"term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen",
"xkb_symbols_gui":"+altwin(ctrl_alt_win)+mac_gui(mac_levelssym)",
"xkb_symbols_term":"+altwin(swap_alt_win)+mac_term(mac_win)+mac_term(mac_global)",
"xkb_types_gui":"+mac_gui(addmac_levels)",
@@ -36,8 +36,8 @@
"type":"mac",
"active": true,
"description":"Standard Mac Keyboards",
"gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY",
"term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY",
"gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen",
"term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen",
"xkb_symbols_gui":"+ctrl(swap_lwin_lctl)+ctrl(swap_rwin_rctl)+mac_gui(mac_levelssym)",
"xkb_symbols_term":"+altwin(alt_super_win)+mac_term(mac_apple)+mac_term(mac_global)",
"xkb_types_gui":"+mac_gui(addmac_levels)",
@@ -49,8 +49,8 @@
"type":"chromebook",
"active": false,
"description":"Standard Chromebook Keyboards",
"gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY",
"term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY",
"gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen",
"term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen",
"xkb_symbols_gui":"+chromebook(swap_lalt_lctrl)+mac_gui(mac_levelssym)",
"xkb_symbols_term":"+altwin(swap_alt_win)+mac_term_chromebook(mac_levelssym)",
"xkb_types_gui":"+mac_gui(addmac_levels)",
@@ -62,9 +62,9 @@
"type":"chromebook",
"active": false,
"description":"Chromebook with Windows 104 Keyboard",
"gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY; setxkbmap -device $usbid -option altwin:ctrl_alt_win",
"term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY",
"fallbackgui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY",
"gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen; setxkbmap -device $usbid -option altwin:ctrl_alt_win",
"term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen",
"fallbackgui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen",
"xkb_symbols_gui":"+chromebook(swap_lalt_lctrl)+mac_gui(mac_levelssym)",
"xkb_symbols_term":"+altwin(swap_alt_win)+mac_term_chromebook(mac_levelssym)",
"xkb_types_gui":"+mac_gui(addmac_levels)",
@@ -76,8 +76,8 @@
"type":"chromebook",
"active": false,
"description":"Chromebook with Mac Keyboard",
"gui":"setxkbmap -option;setxkbmap -option ctrl:swap_lwin_lctl; xkbcomp -w0 -i $internalid -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY",
"term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY",
"gui":"setxkbmap -option;setxkbmap -option ctrl:swap_lwin_lctl; xkbcomp -w0 -i $internalid -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY 2>&1 | grep -v XF86FullScreen",
"term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY 2>&1 | grep -v XF86FullScreen",
"xkb_symbols_gui":"+chromebook(swap_lalt_lctrl)+mac_gui(mac_levelssym)",
"xkb_symbols_term":"+altwin(swap_alt_win)+mac_term_chromebook(mac_levelssym)",
"xkb_types_gui":"+mac_gui(addmac_levels)",

View File

@@ -8,6 +8,7 @@ mkdir -p ~/.config/systemd/user
mkdir -p ~/.config/autostart
cp ./system-config/keyswap.service ~/.config/systemd/user/keyswap.service
cp ./system-config/kinto.desktop ~/.config/autostart/kinto.desktop
cp ./system-config/keyswap.timer ~/.config/systemd/user/keyswap.timer
cp ./kintox11/binary/kintox11 ~/.config/kinto/kintox11
cp ./system-config/xactive.sh ~/.config/kinto/xactive.sh
cp ./system-config/caret_status.sh ~/.config/kinto/caret_status.sh
@@ -20,5 +21,6 @@ if [ "${#DISPLAY}" -gt 2 ]
sed -i "s/#Environment/Environment/g" ~/.config/systemd/user/keyswap.service
fi
systemctl --user daemon-reload
systemctl --user enable keyswap
systemctl --user start keyswap
sed -i "s/ExecStart=/ExecStart=${swapcmd}/g" ~/.config/systemd/user/keyswap.service
systemctl --user enable keyswap.timer
systemctl --user start keyswap.timer

Binary file not shown.

View File

@@ -194,7 +194,7 @@ Window get_focus_window(Display* d){
// a top window have the following specifications.
// * the start window is contained the descendent windows.
// * the parent window is the root window.
Window get_top_window(Display* d, Window start){
Window get_top_window(Display* d, Window start, int etype, int last_event, char const *current_app){
Window w = start;
Window parent = start;
Window root = None;
@@ -202,22 +202,27 @@ Window get_top_window(Display* d, Window start){
unsigned int nchildren;
Status s;
while (parent != root && parent != 0) {
// Checking for Destroy and Unmap Notify events here too
// Sometimes they still get passed through and if so need
// to be ignored or XQueryTree will cause a segmentation fault
while (parent != root && parent != 0 && !(etype == 17 || etype == 18)) {
w = parent;
s = XQueryTree(d, w, &root, &parent, &children, &nchildren); // see man
if (s)
XFree(children);
if(xerror){
printf("fail to get top window: %ld\n",w);
exit(1);
printf("fail to get top window: %ld, e.type: %d, last_event: %d, current_app: %s\n",w,etype,last_event, current_app);
break;
}
// printf(" get parent (window: %d)\n", (int)w);
}
// printf("success (window: %d)\n", (int)w);
// printf("hello\n");
return w;
}
@@ -431,7 +436,7 @@ int main(void){
// get active window
w = get_focus_window(d);
w = get_top_window(d, w);
w = get_top_window(d, w, 0, 0, current_app);
w = get_named_window(d, w);
// XFetchName(d, w, &name);
@@ -546,8 +551,35 @@ int main(void){
}
}
// if(strcicmp(current_app, "plasmashell") == 0){
// XNextEvent(d, &e);
// }
// if(strcicmp(current_app, "plasmashell") == 0 && e.type == 18 && last_event == 22){
// XNextEvent(d, &e);
// }
// if(strcicmp(prior_app, "plasmashell") == 0){
// XNextEvent(d, &e);
// }
// if(strcicmp(current_app, "dolphin") == 0){
// XNextEvent(d, &e);
// }
// if(strcicmp(prior_app, "dolphin") == 0){
// XNextEvent(d, &e);
// }
// if(strcicmp(current_app, "dolphin") == 0 && e.type == 18 && last_event == 16){
// XNextEvent(d, &e);
// }
// Reference http://www.rahul.net/kenton/xproto/xevents_errors.html
// event type 17 - DestroyNotify
// event type 18 - UnmapNotify
// Dismiss the following events by initiating another XNextEvent
while(e.type == 17 || e.type == 18){
XNextEvent(d, &e);
}
w = get_focus_window(d);
w = get_top_window(d, w);
w = get_top_window(d, w, e.type, last_event, current_app);
w = get_named_window(d, w);
}
}

View File

@@ -25,16 +25,19 @@ def requirements(pkgm):
def install_ibus():
print(bcolors.CYELLOW + "You need to set IBus as the default Input Method for full word-wise support and re-run this installer.\n" + bcolors.ENDC)
print(bcolors.CYELLOW + "Confirm the IBus Setup by saying Yes and then closing the window.\n" + bcolors.ENDC)
print("ibus-setup\n")
print("im-config -n ibus\n")
run_install = yn_choice(bcolors.CYELLOW + "Would you like to run it now? (Will require logoff and logon.)\n" + bcolors.ENDC)
if(run_install):
os.system("ibus-setup")
os.system("im-config -n ibus")
print("\n")
input("IBus has been set as the default Input Method.\nPress any key to exit and re-run after logoff & logon...")
sys.exit()
# check_x11 = cmdline("env | grep -i x11").strip()
check_x11 = cmdline("loginctl show-session \"$XDG_SESSION_ID\" -p Type | awk -F= '{print $2}'").strip()
check_x11 = cmdline("env | grep -i x11 || loginctl show-session \"$XDG_SESSION_ID\" -p Type | awk -F= '{print $2}'").strip()
if len(check_x11) == 0:
print("You are not using x11, please logout and back in using x11/Xorg")
@@ -42,20 +45,21 @@ if len(check_x11) == 0:
check_xbind = cmdline("which xbindkeys 2>/dev/null").strip()
check_xdotool = cmdline("which xdotool 2>/dev/null").strip()
check_ibus = cmdline("which ibus-setup 2>/dev/null").strip()
pkgm = cmdline("which apt 2>/dev/null").strip()
pkgm = cmdline("which apt-get 2>/dev/null").strip()
if len(pkgm) == 0:
pkgm = cmdline("which dnf 2>/dev/null").strip()
if len(pkgm) > 0:
pkgm += " install -y "
pkgm += " check-update;sudo dnf install -y "
else:
pkgm += " install -y "
pkgm += " update; sudo apt-get install -y "
if len(pkgm) == 0:
pkgm = cmdline("which pacman 2>/dev/null").strip()
if len(pkgm) > 0:
pkgm += " -S "
pkgm += " -Syy; sudo pacman -S "
if len(pkgm) == 0:
@@ -66,14 +70,18 @@ if len(pkgm) == 0:
runpkg = 0
run_pkg = ""
if len(check_xbind) > 0 and len(check_xdotool) > 0:
print("Xbindkeys, and xdotool requirement is installed.")
if len(check_xbind) > 0 and len(check_xdotool) > 0 and len(check_ibus) > 0:
print("Xbindkeys, xdotool and IBus requirement is installed.")
if len(check_xbind) == 0:
run_pkg = "xbindkeys"
runpkg = 1
if len(check_xdotool) == 0:
run_pkg += " xdotool"
runpkg = 1
if len(check_ibus) == 0:
# may differ with distro, but for now
run_pkg += " ibus"
runpkg = 1
if runpkg != 0:
requirements(pkgm)

View File

@@ -0,0 +1,11 @@
# keyswap.timer
[Unit]
Description=Runs the keyswap.service 5 seconds after boot up
[Timer]
#OnBootSec=5s
OnActiveSec=5s
Unit=keyswap.service
[Install]
WantedBy=default.target

View File

@@ -2,7 +2,7 @@
Name=Kinto
GenericName=Kinto
Comment=Make Linux Type Like it's a Mac
Exec=/usr/bin/systemctl --user start keyswap
Exec=/bin/sleep 5 /usr/bin/systemctl --user start keyswap
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true

View File

@@ -36,7 +36,7 @@
"symbols": "",
"types": "",
"de": [],
"appnames": [ "Chromium","Chromium-browser","Google-chrome" ]
"appnames": [ "Chromium","Chromium-browser","Google-chrome","Epiphany" ]
}],
"init": [],
"detypes":["gnome2","gnome3","kde4","kde5","xfce","i3wm"],