uinput-keyboard 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rakeTasks +7 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +3 -0
- data/README.md +38 -0
- data/Rakefile +2 -0
- data/lib/uinput/keyboard.rb +62 -0
- data/lib/uinput/keyboard/factory.rb +16 -0
- data/lib/uinput/keyboard/version.rb +3 -0
- data/test.rb +19 -0
- data/uinput-keyboard.gemspec +23 -0
- metadata +112 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 10affa386faea155c4dd9aaf1fbe3156acb7efc0
|
4
|
+
data.tar.gz: 1a8ac475e5d7f99b2247f1e272ad04893fb9de44
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0ab3074c1b532c3658d4b995b98599560a400c000e821d7bc78eb451cb2945ec067c8850a394fa4b31416ff054e9e5362e7075216bb0f46032487aa21568768c
|
7
|
+
data.tar.gz: e59de67c8452bb7ae4fb670f2736e0569ded9bd800b7828386f5db2134b5b51cc073eb55fee0a204d2720a88061039795d911530699cae9b9fd7f933e1efdaff
|
data/.gitignore
ADDED
data/.rakeTasks
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<Settings><!--This file was automatically generated by Ruby plugin.
|
3
|
+
You are allowed to:
|
4
|
+
1. Remove rake task
|
5
|
+
2. Add existing rake tasks
|
6
|
+
To add existing rake tasks automatically delete this file and reload the project.
|
7
|
+
--><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build uinput-keyboard-0.1.0.gem into the pkg directory" fullCmd="build" taksId="build" /><RakeTask description="Build and install uinput-keyboard-0.1.0.gem into system gems" fullCmd="install" taksId="install" /><RakeTask description="Create tag v0.1.0 and build and push uinput-keyboard-0.1.0.gem to Rubygems" fullCmd="release" taksId="release" /><RakeGroup description="" fullCmd="" taksId="release"><RakeTask description="" fullCmd="release:guard_clean" taksId="guard_clean" /><RakeTask description="" fullCmd="release:rubygem_push" taksId="rubygem_push" /><RakeTask description="" fullCmd="release:source_control_push" taksId="source_control_push" /></RakeGroup></RakeGroup></Settings>
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# Uinput::Keyboard
|
2
|
+
|
3
|
+
Ruby wrapper around uinput to create a virtual keyboard.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'uinput-keyboard'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install uinput-keyboard
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
require 'uinput/keyboard'
|
25
|
+
|
26
|
+
begin
|
27
|
+
keymap = Uinput::Keyboard.keymap(rules: 'evdev', model: 'pc104', layout: 'de', variant: 'nodeadkeys')
|
28
|
+
keyboard = Uinput::Keyboard.new(keymap)
|
29
|
+
|
30
|
+
sleep 1 # to give linux time to setup the new device
|
31
|
+
|
32
|
+
# While a terminal has focus
|
33
|
+
keyboard.type('date') # => $ date
|
34
|
+
keyboard.tap(:Return) # => Sun Aug 23 22:57:28 CEST 2015
|
35
|
+
ensure
|
36
|
+
keyboard.destroy if keyboard
|
37
|
+
end
|
38
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'uinput/device'
|
2
|
+
require 'xkbcommon'
|
3
|
+
require "uinput/keyboard/version"
|
4
|
+
require 'uinput/keyboard/factory'
|
5
|
+
|
6
|
+
module Uinput
|
7
|
+
class Keyboard < Device
|
8
|
+
class << self
|
9
|
+
def keymap(names)
|
10
|
+
Xkbcommon::Context.new.keymap_from_names(names)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(keymap, &block)
|
15
|
+
@keymap = keymap
|
16
|
+
super(&block)
|
17
|
+
end
|
18
|
+
|
19
|
+
attr_accessor :keymap
|
20
|
+
|
21
|
+
def press(*symbols)
|
22
|
+
symbols_to_keys(*symbols).each{ |key| send_key_event(key.scan_code, state: 1) }
|
23
|
+
send_syn_event
|
24
|
+
end
|
25
|
+
|
26
|
+
def release(*symbols)
|
27
|
+
symbols_to_keys(*symbols).each{ |key| send_key_event(key.scan_code, state: 0) }
|
28
|
+
send_syn_event
|
29
|
+
end
|
30
|
+
|
31
|
+
def tap(*symbols)
|
32
|
+
press(*symbols)
|
33
|
+
release(*symbols)
|
34
|
+
end
|
35
|
+
|
36
|
+
def type(string)
|
37
|
+
string_to_symbols(string).each{ |symbols| tap(*symbols) }
|
38
|
+
end
|
39
|
+
|
40
|
+
def send_key_event(scan_code, state: 1)
|
41
|
+
send_event(EV_KEY, scan_code, state)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def symbols_to_keys(*names)
|
47
|
+
[*names].flat_map{ |name| symbol(name).keys }
|
48
|
+
end
|
49
|
+
|
50
|
+
def string_to_symbols(string)
|
51
|
+
string.chars.map{ |char| char_to_symbol(char).name }
|
52
|
+
end
|
53
|
+
|
54
|
+
def symbol(name)
|
55
|
+
@keymap.symbols[name.to_sym] or raise Device::Error.new("no keysym '#{name}' in keymap")
|
56
|
+
end
|
57
|
+
|
58
|
+
def char_to_symbol(char)
|
59
|
+
@keymap.characters[char] or raise Device::Error.new("no character '#{char}' in keymap")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Uinput
|
2
|
+
class Keyboard < Device
|
3
|
+
class SystemInitializer < Device::SystemInitializer
|
4
|
+
def initialize(keyboard, &block)
|
5
|
+
@keyboard = keyboard
|
6
|
+
super(&block)
|
7
|
+
receive_key_events
|
8
|
+
add_all_keys
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_all_keys
|
12
|
+
@keyboard.keymap.keys.map(&:scan_code).each{ |key| add_key(key) }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/test.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib'))
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'uinput/keyboard'
|
4
|
+
|
5
|
+
begin
|
6
|
+
keymap = Uinput::Keyboard.keymap(rules: 'evdev', model: 'pc104', layout: 'de', variant: 'nodeadkeys')
|
7
|
+
keyboard = Uinput::Keyboard.new(keymap)
|
8
|
+
|
9
|
+
sleep 1
|
10
|
+
|
11
|
+
keyboard.type('date')
|
12
|
+
keyboard.tap(:Return)
|
13
|
+
|
14
|
+
#keyboard.type('Ѣ')
|
15
|
+
#('a'..'z').each{ |char| keyboard.tap(char) }
|
16
|
+
#keyboard.tap(:UndefinedKeySym)
|
17
|
+
ensure
|
18
|
+
keyboard.destroy if keyboard
|
19
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'uinput/keyboard/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "uinput-keyboard"
|
8
|
+
spec.version = Uinput::Keyboard_VERSION
|
9
|
+
spec.authors = ["Christopher Aue"]
|
10
|
+
spec.email = ["mail@christopheraue.net"]
|
11
|
+
|
12
|
+
spec.summary = %q{Ruby wrapper around uinput to create a virtual keyboard.}
|
13
|
+
spec.homepage = "https://github.com/christopheraue/ruby-uinput-keyboard"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
spec.require_paths = ["lib"]
|
18
|
+
|
19
|
+
spec.add_development_dependency "bundler", "~> 1.8"
|
20
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
21
|
+
spec.add_dependency "uinput-device", "~> 0.1"
|
22
|
+
spec.add_dependency "xkbcommon", "~> 0.1"
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: uinput-keyboard
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Christopher Aue
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-08-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.8'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.8'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: uinput-device
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.1'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: xkbcommon
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.1'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.1'
|
69
|
+
description:
|
70
|
+
email:
|
71
|
+
- mail@christopheraue.net
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- ".rakeTasks"
|
78
|
+
- ".rspec"
|
79
|
+
- ".travis.yml"
|
80
|
+
- Gemfile
|
81
|
+
- README.md
|
82
|
+
- Rakefile
|
83
|
+
- lib/uinput/keyboard.rb
|
84
|
+
- lib/uinput/keyboard/factory.rb
|
85
|
+
- lib/uinput/keyboard/version.rb
|
86
|
+
- test.rb
|
87
|
+
- uinput-keyboard.gemspec
|
88
|
+
homepage: https://github.com/christopheraue/ruby-uinput-keyboard
|
89
|
+
licenses:
|
90
|
+
- MIT
|
91
|
+
metadata: {}
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options: []
|
94
|
+
require_paths:
|
95
|
+
- lib
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
requirements: []
|
107
|
+
rubyforge_project:
|
108
|
+
rubygems_version: 2.4.8
|
109
|
+
signing_key:
|
110
|
+
specification_version: 4
|
111
|
+
summary: Ruby wrapper around uinput to create a virtual keyboard.
|
112
|
+
test_files: []
|