Seite 1 von 1
screen edge actions unter Linux
Verfasst: Sonntag 15. August 2010, 19:23
von bazooka
Hi,
im Grunde möchte ich ein Python script schreiben, dass ein Kommando ausführt, sobald der Mauszeiger den linken oder rechten Rand des Bildschirms berührt. Ich möchte dazu benutzen, den Workspace (unter fluxbox) zu wechseln, wenn ich die Maus an den Bildschirmrand schiebe.
Das script ist im Grunde fertig und funktioniert auch einwandfrei, jedoch verbraucht es zu viel CPU power (ca. 5%, Core2duo, 1 GHz). Ich frage nämlich alle viertel Sekunde die Mausposition ab. Das muss doch irgendwie besser gehen?
Hier das script:
Code: Alles auswählen
#! /usr/bin/env python
from Xlib import display
from Xlib.ext.xtest import fake_input
from Xlib import X
import time
import os
def mousemove(x, y):
my_screen = display.Display()
fake_input(my_screen, X.MotionNotify, x=x, y=y)
my_screen.sync()
def mousepos():
data = display.Display().screen().root.query_pointer()._data
return data["root_x"], data["root_y"]
check_intervall = 0.25
left_trigger = 0
right_trigger = display.Display().screen().width_in_pixels-1
while True:
time.sleep(check_intervall)
pos = mousepos()
if pos[0] == left_trigger:
mousemove(right_trigger-1, pos[1])
os.system('fluxbox-remote PrevWorkspace')
elif pos[0] == right_trigger:
mousemove(left_trigger+1, pos[1])
os.system('fluxbox-remote NextWorkspace')
liebe Grüße
Re: screen edge actions unter Linux
Verfasst: Sonntag 15. August 2010, 19:36
von Rebecca
Ich kenne mich zwar mit FluxBox nicht aus, aber sollte es nicht andersherum funktionieren, d.h. FluxBox ruft dein Script auf wenn die Maus am Rand ist?
Re: screen edge actions unter Linux
Verfasst: Sonntag 15. August 2010, 19:46
von lunar
Du kannst alternativ global auf Mausereignisse lauschen. Dazu gibt es die XRecord-Erweiterung mit dazugehöriger API. Frag mich aber nicht nach Details, X-Bibliotheken zeichnen sich vor allem immer durch abwesende oder mangelhafte Dokumentation aus

Re: screen edge actions unter Linux
Verfasst: Sonntag 15. August 2010, 20:36
von bazooka
Rebecca hat geschrieben:Ich kenne mich zwar mit FluxBox nicht aus, aber sollte es nicht andersherum funktionieren, d.h. FluxBox ruft dein Script auf wenn die Maus am Rand ist?
Sicherlich, das wäre am besten. Ein entsprechender Verbesserungsvorschlag wurde auch bereits von jemandem erstellt, ist aber leider nicht umgesetzt:
http://sourceforge.net/tracker/?func=de ... tid=413963
Mein Ansatz hätte den Vorteil, dass er völlig unabhängig vom Windowmanager wäre, so ein Programm habe ich bis jetzt noch nicht gefunden.
lunar hat geschrieben:Du kannst alternativ global auf Mausereignisse lauschen. Dazu gibt es die XRecord-Erweiterung mit dazugehöriger API.
Leider finde ich dazu nichts, was mir weiterhelfen würde. Ich muss zugeben, dass dies auch mein erstes Python script ist, von daher weiß ich auch nicht genau, wonach ich suchen soll. Google über xrecord und python auszufragen hat mir keine brauchbaren Resultate geliefert.
Re: screen edge actions unter Linux
Verfasst: Montag 16. August 2010, 07:49
von snafu
Es beantwortet nicht die Frage, aber weißt du bereits wie man
Keybindings unter Fluxbox festlegt? Falls es nur um ein schnelles Wechseln der Arbeitsfläche geht, dann könntest du das z.B. auf Strg + Alt + Pfeil-nach-links bzw. Pfeil-nach-rechts legen.
Und sofern deine Maus ein Mausrad hat, findest du
hier eine Anleitung wie man damit den Wechsel der Arbeitsfläche verknüpft.
Re: screen edge actions unter Linux
Verfasst: Montag 16. August 2010, 11:18
von bazooka
Ja, das ist mir alles bekannt. Der Clou wären halt "active edges", wenn das script im Prinzip funktioniert, ergeben sich dadurch ja auch viele andere Anwendungsmöglichkeiten.
Re: screen edge actions unter Linux
Verfasst: Montag 16. August 2010, 12:45
von mkesper
Ich würde auf einer fluxbox Mailingliste bzw. im irc nachfragen.

Re: screen edge actions unter Linux
Verfasst: Montag 16. August 2010, 15:29
von bazooka
naja, damit habe ich das Programmierproblem nicht gelöst. Die Frage ist ja, wie ich das in Python effizient lösen kann. Ob es eine bessere Lösung für das spezielle Problem seitens von Fluxbox ist, tut ja nix zur Sache...
Okay, ich hätte den Threadtitel anders wählen sollen

Re: screen edge actions unter Linux
Verfasst: Montag 16. August 2010, 16:18
von Dav1d
Bei mir verbraucht das Skript 1% , allerdings ist meine CPU auch Leistungsstärker (Q9550)
Ich hab's geschafft, den CPU verbrauch auf 0.0% zu verringern (laut htop)
Code: Alles auswählen
#! /usr/bin/env python
from Xlib import display
from Xlib.ext.xtest import fake_input
from Xlib import X
import time
import os
disp = display.Display()
screen = disp.screen()
def mousemove(x, y):
fake_input(disp, X.MotionNotify, x=x, y=y)
disp.sync()
def mousepos():
data = screen.root.query_pointer()._data
return data["root_x"], data["root_y"]
check_intervall = 0.25
left_trigger = 0
right_trigger = screen.width_in_pixels-1
while True:
time.sleep(check_intervall)
pos = mousepos()
if pos[0] == left_trigger:
mousemove(right_trigger-1, pos[1])
os.system('fluxbox-remote PrevWorkspace')
elif pos[0] == right_trigger:
mousemove(left_trigger+1, pos[1])
os.system('fluxbox-remote NextWorkspace')
System: Archlinux 2.6.34-ARCH, dwm
Die 2 globalen vars, haben das Problem "gelöst", ich hab auch getesetet ob os.system noch ausgeführt wird, das funktioniert auch noch.
//Edit: btw. Danke für das Skript, mal schauen wie ich das intregrieren kann
Re: screen edge actions unter Linux
Verfasst: Montag 16. August 2010, 20:19
von bazooka
Herrlich! Das war die Idee. Kleine Änderung, große Wirkung. Bei mir auch 0%.
Vielen Dank!