Panzli
Anmeldungsdatum: 17. Dezember 2021
Beiträge: 19
|
Hallo, ich bin auf der Suche nach einem Skript oder einer Hilfestellung, dass wenn ich zum Beispiel test eingebe sich automatisch ein Script öffnet. Dies sollte per Key Input passieren und nicht als shortcut. Mit z. B.
kann ich ja schonmal die Inputs loggen, doch wie starte ich mit der passenden eingetippten Buchstabenreinfolge "test" ein Script?
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Hallo! Du möchtest also die Tastatureingabe VOR Verarbeitung durch Desktop-Environment, etc. abfangen und bei einer bestimmten Buchstabenfolge eine Aktion auslösen? Dazu bräuchtest du ein Kernelmodul, einen daemon/server im Hintergrund, o.ä. Klingt für mich nach einem Keylogger mit Auswertung. Beschreibe mal den konkreten Anwendungsfall.
|
kkjbghj
Anmeldungsdatum: 27. August 2021
Beiträge: 4
|
Ich denke er will zum Beispiel einfach "Firefox" in den leeren Desktop eingeben, damit sich z.B. ein Firefox Fenster öffnet.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12832
|
Panzli schrieb: Hallo, ich bin auf der Suche nach einem Skript oder einer Hilfestellung, dass wenn ich zum Beispiel test eingebe sich automatisch ein Script öffnet. Dies sollte per Key Input passieren und nicht als shortcut.
Ganz einfach: Du definierst Dir in ~/.bash_aliases Aliase für Deine am häufigsten benutzten Skripte. Dann öffnest ein Terminal gibst einfach den Namen des Alias gefolgt von Enter ein und das entsprechende Skript läuft.
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
kkjbghj schrieb: Ich denke er will zum Beispiel einfach "Firefox" in den leeren Desktop eingeben, damit sich z.B. ein Firefox Fenster öffnet.
Das kann KRunner, für den gibt es auch Alternativen wie Kupfer und Albert, Cerebro und Synapse.
|
Panzli
(Themenstarter)
Anmeldungsdatum: 17. Dezember 2021
Beiträge: 19
|
Danke für die Antworten, aber wie es im dritten Post steht, würde ich es gerne ohne jegliche Tastenkombination machen wollen. Also auf dem Desktop, im Browser oder Gimp.
|
Marant--
Anmeldungsdatum: 4. April 2022
Beiträge: 744
|
Der erwähnte KRunner ist schon gut. Der findet alles(und bietet dann die Auswahl), so wie Du es in Terminal eintippen würdest(Anfang reicht), was per Pfad gefunden wird. Legst Du eigene *.desktop Dateien noch in $HOME/.local/share/applications/ oder $HOME/bin/ ab findet der dann auch Deine selbst kreierten Scripte. Krunner z.B. auf Super Taste legen. Habs etwas blöd formuliert, sorry, Sonne blendet. ☺ Weiss jetzt nur nicht was der noch mitbringt, musst mal selber schauen.
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Panzli schrieb: Danke für die Antworten, aber wie es im dritten Post steht, würde ich es gerne ohne jegliche Tastenkombination machen wollen…
Dann ist KRunner dein Freund. Im leeren Desktop einfach lostippen. Wenn Programme geöffnet sind, musst du allerdings immer eine Taste(nkombination) verwenden oder alternativ mit dem Mauszeiger in eine vordefinierte Ecke gehen, um den zu aktivieren, sonst werden die Eingaben ja ans Programm gesendet.
|
Panzli
(Themenstarter)
Anmeldungsdatum: 17. Dezember 2021
Beiträge: 19
|
Danke nochmals, aber genau das möchte ich eben nicht. Ein anderer zugegeben nicht zutreffenden und komischer Usecase wäre zum Beispiel, wenn jemand rm -rf / eingibt, der PC z. B durch i3lock gesperrt wird..
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11180
Wohnort: München
|
Keylogger sind meistens eine dumme Idee, aber wenn man unbedingt muss, könnte man das z.B. mit dem Paket python3-evdev (vgl. https://python-evdev.readthedocs.io/en/latest/) lösen - das Skript muss als root laufen um auf die Kernel Input Devices zugreifen zu dürfen - das läuft unabhängig von Xorg bzw. Wayland: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 | #!/usr/bin/env python3
import asyncio
import evdev
import subprocess
from typing import List
commands = {
# use only alphanumeric characters (not case-sensitive!) for the key combination and a list of strings for the command
"TEST": ['/usr/local/bin/myscript', "myargument"],
"FOOBAR": ['/usr/local/bin/myscript', "another argument"],
}
class Action:
def __init__(self, key_combination: str, command: List[str]):
self.name = key_combination
self.key_combination: list[int] = [getattr(evdev.ecodes, f"KEY_{k}") for k in key_combination.upper()]
self.command = command
self.process = self._scan_input()
self.process.send(None) # prime out generator for inputs
def _scan_input(self):
while True:
try:
for c in self.key_combination:
k = (yield)
if k != c:
raise ValueError("nonmatching key sequence")
print(f"running {self.command=}")
subprocess.run(self.command)
except ValueError:
continue
async def process_events(device, actions):
async for event in device.async_read_loop():
if event.type == evdev.ecodes.EV_KEY:
if event.value == 0: # key released
for action in actions:
action.process.send(event.code)
def main():
devices = [evdev.InputDevice(path) for path in evdev.list_devices()]
actions = [Action(key_combination, command) for key_combination, command in commands.items()]
for device in devices:
asyncio.ensure_future(process_events(device, actions))
loop = asyncio.get_event_loop()
try:
loop.run_forever()
except KeyboardInterrupt:
loop.stop()
if __name__ == '__main__':
main()
|
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Panzli schrieb: Danke nochmals, aber genau das möchte ich eben nicht. Ein anderer zugegeben nicht zutreffenden und komischer Usecase wäre zum Beispiel, wenn jemand rm -rf / eingibt, der PC z. B durch i3lock gesperrt wird..
Das ist aber was ganz anderes als in Post 3. Da brauchst du wirklich einen Keylogger, der jede Eingabe buffert und auswertet. Zudem müsstest du theoretisch jedes Input-Device abfangen, da du ja auch einfach ein "rm -rf /[Enter]" per Mausklick einfügen kannst. Besonders schön wird es, wenn derjenige "r Alt+Tab{2} m -rf /" eingibt. Da kannst du wahrscheinlich ein halbes Inputsystem programmieren, um alles erdenkliche abzufangen. Falls du ein paar konkrete Fälle hast, wäre das sicher einfacher anders zu lösen. rm -rf / ist ja kein Problem, solange der Nutzer ausschliesslich bei seinen Dateien Schreibrechte hat. Seine eigenen Sachen sollte man ja schon löschen dürfen.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12832
|
ChickenLipsRfun2eat schrieb: Panzli schrieb: Danke nochmals, aber genau das möchte ich eben nicht. Ein anderer zugegeben nicht zutreffenden und komischer Usecase wäre zum Beispiel, wenn jemand rm -rf / eingibt, der PC z. B durch i3lock gesperrt wird..
Das ist aber was ganz anderes als in Post 3.
!
Da brauchst du wirklich einen Keylogger, der jede Eingabe buffert und auswertet. Zudem müsstest du theoretisch jedes Input-Device abfangen, da du ja auch einfach ein "rm -rf /[Enter]" per Mausklick einfügen kannst. Besonders schön wird es, wenn derjenige "r Alt+Tab{2} m -rf /" eingibt. Da kannst du wahrscheinlich ein halbes Inputsystem programmieren, um alles erdenkliche abzufangen. Falls du ein paar konkrete Fälle hast, wäre das sicher einfacher anders zu lösen. rm -rf / ist ja kein Problem, solange der Nutzer ausschliesslich bei seinen Dateien Schreibrechte hat. Seine eigenen Sachen sollte man ja schon löschen dürfen.
Es gibt noch ein anderes Problem: es wird Sequenzen geben, die - je nach Kontext - völlig OK sind. Die kann man dann auch nicht mehr eingeben. Was genau ist der Use Case? Was ist Dein Ziel?
|