improved compatibility

pull/14/head
sezanzeb 4 years ago
parent 43349c4cf8
commit 57128109eb

@ -0,0 +1,3 @@
Files: *
Copyright: 2020 sezanzeb
License: GPL-3+

@ -25,10 +25,11 @@ Download a release .deb file from [/releases](https://github.com/sezanzeb/key-ma
or install from source and dpkg using the following commands:
```bash
sudo apt install git python3-setuptools
git clone https://github.com/sezanzeb/key-mapper.git
cd key-mapper && ./scripts/build.sh
sudo dpkg -i ./dist/key-mapper-0.4.0.deb
sudo apt-get -f install
sudo apt -f install
```
##### pip

@ -0,0 +1,3 @@
#!/bin/bash
pkexec key-mapper-gtk

@ -2,7 +2,7 @@
Type=Application
Name=key-mapper
Icon=/usr/share/key-mapper/key-mapper.svg
Exec=pkexec key-mapper-gtk
Exec=key-mapper-gtk-pkexec
Terminal=false
Categories=Settings
Comment=GUI for device specific key mappings

@ -387,6 +387,7 @@
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">10</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkButton" id="apply_preset">
<property name="label">Apply</property>
@ -400,7 +401,7 @@
<signal name="clicked" handler="on_apply_preset_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
@ -417,7 +418,7 @@
<signal name="clicked" handler="on_save_preset_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
@ -434,7 +435,7 @@
<signal name="clicked" handler="on_create_preset_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
@ -451,14 +452,14 @@
<signal name="clicked" handler="on_delete_preset_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
@ -579,7 +580,7 @@
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
@ -735,40 +736,11 @@
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkStatusbar" id="status_bar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">10</property>
<property name="margin-right">10</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<property name="orientation">vertical</property>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
@ -777,29 +749,74 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="keycode">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">This is the keycode you just pressed, and that you see in the mappings to the right.</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="width-chars">4</property>
<child>
<object class="GtkStatusbar" id="status_bar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">10</property>
<property name="margin-right">10</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<style>
<class name="status_bar"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="keycode">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">This is the keycode you just pressed, and that you see in the mappings to the right.</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="width-chars">4</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
<property name="pack-type">end</property>
<property name="position">4</property>
</packing>
</child>
</object>

@ -2,6 +2,11 @@ row {
padding: 0;
}
.status_bar frame {
/* the status bar is ugly in elementary os otherwise */
border: 0px;
}
.table-header, .row-box {
padding: 2px;
}
@ -13,6 +18,7 @@ row {
list entry {
background-color: transparent;
border-radius: 4px;
border: 0px;
}
list button:not(:focus) {

@ -30,6 +30,7 @@ import os
from keymapper.logger import logger
from keymapper.paths import USER
from keymapper.daemon import is_service_running
def check_group(group):
@ -96,7 +97,10 @@ def can_read_devices():
plugdev_check = check_group('plugdev')
# ubuntu. funnily, individual devices in /dev/input/ have write permitted.
can_write = check_injection_rights()
if not is_service_running():
can_write = check_injection_rights()
else:
can_write = None
ret = [
check for check

@ -45,6 +45,7 @@ setup(
('/etc/dbus-1/system.d/', ['data/keymapper.Control.conf']),
('/etc/xdg/autostart/', ['data/key-mapper-autoload.desktop']),
('/usr/bin/', ['bin/key-mapper-gtk']),
('/usr/bin/', ['bin/key-mapper-gtk-pkexec']),
('/usr/bin/', ['bin/key-mapper-service']),
('/usr/bin/', ['bin/key-mapper-control']),
],

@ -28,6 +28,7 @@ import unittest
from keymapper.dev.permissions import check_injection_rights, check_group, \
can_read_devices
from keymapper.paths import USER
from keymapper.daemon import is_service_running
original_access = os.access
@ -37,7 +38,7 @@ original_stat = os.stat
oringal_getuser = getpass.getuser
class TestCheckGroup(unittest.TestCase):
class TestPermissions(unittest.TestCase):
def tearDown(self):
# reset all fakes
os.access = original_access
@ -97,12 +98,20 @@ class TestCheckGroup(unittest.TestCase):
self.gr_mem = gr_mems[group][1]
grp.getgrnam = getgrnam
# fake the `groups` output to act like the current session only
# has input and a_unused active
subprocess.check_output = lambda cmd: b'foo input a_unused bar'
def fake_check_output(cmd):
# fake the `groups` output to act like the current session only
# has input and a_unused active
if cmd[0] == 'groups':
return b'foo input a_unused bar'
return original_check_output(cmd)
subprocess.check_output = fake_check_output
def test_can_read_devices(self):
self.fake_setup()
self.assertFalse(is_service_running())
# root user doesn't need this stuff
getpass.getuser = lambda: 'root'

Loading…
Cancel
Save