sblantipodi / firefly_luciferin

Very fast Java screen capture PC software designed for the Glow Worm Luciferin firmware, the combination of these software create the perfect Bias Lighting and Ambient Light system for PC.
GNU General Public License v3.0
312 stars 29 forks source link

[Bug]: Bias light not working on Wayland display server #130

Closed dimipage closed 8 months ago

dimipage commented 1 year ago

Firefly Luciferin version

2.11.7

Glow Worm Luciferin version

5.10.6

Firmware type

FULL

What is the stream method?

WiFi Stream

Fiefly Luciferin config file

---
hueMap:
  BLUE:
    hue: 0.0
    saturation: 0.0
    lightness: 0.0
  GREEN:
    hue: 0.0
    saturation: 0.0
    lightness: 0.0
  MAGENTA:
    hue: 0.0
    saturation: 0.0
    lightness: 0.0
  MASTER:
    hue: 0.0
    saturation: 0.0
    lightness: 0.0
  RED:
    hue: 0.0
    saturation: 0.0
    lightness: 0.0
  CYAN:
    hue: 0.0
    saturation: 0.0
    lightness: 0.0
  YELLOW:
    hue: 0.0
    saturation: 0.0
    lightness: 0.0
  GREY:
    hue: 0.0
    saturation: 0.0
    lightness: 0.0
topLed: 24
leftLed: 10
rightLed: 10
bottomLeftLed: 8
bottomRightLed: 8
bottomRowLed: 26
orientation: "Anticlockwise"
numberOfCPUThreads: 1
captureMethod: "XIMAGESRC"
baudRate: "115200"
defaultLedMatrix: "FullScreen"
autoDetectBlackBars: false
timeout: 100
screenResX: 3440
screenResY: 1440
osScaling: 100
gamma: 2.2
whiteTemperature: 65
colorMode: 1
mqttServer: "tcp://192.168.1.3:1883"
mqttTopic: "glowwormluciferin"
mqttUsername: ""
mqttPwd: ""
mqttDiscoveryTopic: "homeassistant"
mqttEnable: false
streamType: "UDP stream"
checkForUpdates: true
eyeCare: false
nightModeFrom: "22:00"
nightModeTo: "08:00"
nightModeBrightness: "0%"
toggleLed: true
desiredFramerate: "30"
frameInsertion: "Smoothing Lvl 1"
colorChooser: "0,255,0,255"
brightness: 255
ledStartOffset: 0
splitBottomMargin: "30%"
grabberAreaTopBottom: "8%"
grabberSide: "8%"
gapTypeTopBottom: "8%"
gapTypeSide: "0%"
startWithSystem: true
multiMonitor: 1
monitorNumber: 0
syncCheck: true
effect: "Bias light"
audioLoopbackGain: 0.0
audioDevice: "Default audio output (Native)"
audioChannels: "2 channels"
multiScreenSingleDevice: false
powerSaving: "Disabled"
theme: "Classic theme"
language: "English"
groupBy: 1
defaultProfile: "tray.icon.default"
enableLDR: false
ldrTurnOff: false
ldrInterval: 0
ldrMin: 0
brightnessLimiter: 1.0
sampleRate: 0
ledMatrix:
  FullScreen:
    1:
      x: 2240
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    2:
      x: 2390
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    3:
      x: 2540
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    4:
      x: 2690
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    5:
      x: 2840
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    6:
      x: 2990
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    7:
      x: 3140
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    8:
      x: 3290
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    9:
      x: 3165
      "y": 1199
      width: 275
      height: 121
      groupedLed: false
    10:
      x: 3165
      "y": 1078
      width: 275
      height: 121
      groupedLed: false
    11:
      x: 3165
      "y": 957
      width: 275
      height: 121
      groupedLed: false
    12:
      x: 3165
      "y": 836
      width: 275
      height: 121
      groupedLed: false
    13:
      x: 3165
      "y": 715
      width: 275
      height: 121
      groupedLed: false
    14:
      x: 3165
      "y": 594
      width: 275
      height: 121
      groupedLed: false
    15:
      x: 3165
      "y": 473
      width: 275
      height: 121
      groupedLed: false
    16:
      x: 3165
      "y": 352
      width: 275
      height: 121
      groupedLed: false
    17:
      x: 3165
      "y": 231
      width: 275
      height: 121
      groupedLed: false
    18:
      x: 3165
      "y": 110
      width: 275
      height: 121
      groupedLed: false
    19:
      x: 3293
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    20:
      x: 3150
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    21:
      x: 3007
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    22:
      x: 2864
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    23:
      x: 2721
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    24:
      x: 2578
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    25:
      x: 2435
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    26:
      x: 2292
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    27:
      x: 2149
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    28:
      x: 2006
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    29:
      x: 1863
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    30:
      x: 1720
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    31:
      x: 1577
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    32:
      x: 1434
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    33:
      x: 1291
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    34:
      x: 1148
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    35:
      x: 1005
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    36:
      x: 862
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    37:
      x: 719
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    38:
      x: 576
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    39:
      x: 433
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    40:
      x: 290
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    41:
      x: 147
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    42:
      x: 4
      "y": 0
      width: 143
      height: 115
      groupedLed: false
    43:
      x: 0
      "y": 110
      width: 275
      height: 121
      groupedLed: false
    44:
      x: 0
      "y": 231
      width: 275
      height: 121
      groupedLed: false
    45:
      x: 0
      "y": 352
      width: 275
      height: 121
      groupedLed: false
    46:
      x: 0
      "y": 473
      width: 275
      height: 121
      groupedLed: false
    47:
      x: 0
      "y": 594
      width: 275
      height: 121
      groupedLed: false
    48:
      x: 0
      "y": 715
      width: 275
      height: 121
      groupedLed: false
    49:
      x: 0
      "y": 836
      width: 275
      height: 121
      groupedLed: false
    50:
      x: 0
      "y": 957
      width: 275
      height: 121
      groupedLed: false
    51:
      x: 0
      "y": 1078
      width: 275
      height: 121
      groupedLed: false
    52:
      x: 0
      "y": 1199
      width: 275
      height: 121
      groupedLed: false
    53:
      x: 0
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    54:
      x: 150
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    55:
      x: 300
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    56:
      x: 450
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    57:
      x: 600
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    58:
      x: 750
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    59:
      x: 900
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
    60:
      x: 1050
      "y": 1325
      width: 150
      height: 115
      groupedLed: false
  Letterbox:
    1:
      x: 2240
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    2:
      x: 2390
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    3:
      x: 2540
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    4:
      x: 2690
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    5:
      x: 2840
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    6:
      x: 2990
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    7:
      x: 3140
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    8:
      x: 3290
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    9:
      x: 3165
      "y": 1059
      width: 275
      height: 86
      groupedLed: false
    10:
      x: 3165
      "y": 973
      width: 275
      height: 86
      groupedLed: false
    11:
      x: 3165
      "y": 887
      width: 275
      height: 86
      groupedLed: false
    12:
      x: 3165
      "y": 801
      width: 275
      height: 86
      groupedLed: false
    13:
      x: 3165
      "y": 715
      width: 275
      height: 86
      groupedLed: false
    14:
      x: 3165
      "y": 629
      width: 275
      height: 86
      groupedLed: false
    15:
      x: 3165
      "y": 543
      width: 275
      height: 86
      groupedLed: false
    16:
      x: 3165
      "y": 457
      width: 275
      height: 86
      groupedLed: false
    17:
      x: 3165
      "y": 371
      width: 275
      height: 86
      groupedLed: false
    18:
      x: 3165
      "y": 285
      width: 275
      height: 86
      groupedLed: false
    19:
      x: 3293
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    20:
      x: 3150
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    21:
      x: 3007
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    22:
      x: 2864
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    23:
      x: 2721
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    24:
      x: 2578
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    25:
      x: 2435
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    26:
      x: 2292
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    27:
      x: 2149
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    28:
      x: 2006
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    29:
      x: 1863
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    30:
      x: 1720
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    31:
      x: 1577
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    32:
      x: 1434
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    33:
      x: 1291
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    34:
      x: 1148
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    35:
      x: 1005
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    36:
      x: 862
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    37:
      x: 719
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    38:
      x: 576
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    39:
      x: 433
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    40:
      x: 290
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    41:
      x: 147
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    42:
      x: 4
      "y": 205
      width: 143
      height: 82
      groupedLed: false
    43:
      x: 0
      "y": 285
      width: 275
      height: 86
      groupedLed: false
    44:
      x: 0
      "y": 371
      width: 275
      height: 86
      groupedLed: false
    45:
      x: 0
      "y": 457
      width: 275
      height: 86
      groupedLed: false
    46:
      x: 0
      "y": 543
      width: 275
      height: 86
      groupedLed: false
    47:
      x: 0
      "y": 629
      width: 275
      height: 86
      groupedLed: false
    48:
      x: 0
      "y": 715
      width: 275
      height: 86
      groupedLed: false
    49:
      x: 0
      "y": 801
      width: 275
      height: 86
      groupedLed: false
    50:
      x: 0
      "y": 887
      width: 275
      height: 86
      groupedLed: false
    51:
      x: 0
      "y": 973
      width: 275
      height: 86
      groupedLed: false
    52:
      x: 0
      "y": 1059
      width: 275
      height: 86
      groupedLed: false
    53:
      x: 0
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    54:
      x: 150
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    55:
      x: 300
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    56:
      x: 450
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    57:
      x: 600
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    58:
      x: 750
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    59:
      x: 900
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
    60:
      x: 1050
      "y": 1153
      width: 150
      height: 82
      groupedLed: false
  Pillarbox:
    1:
      x: 2076
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    2:
      x: 2179
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    3:
      x: 2282
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    4:
      x: 2385
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    5:
      x: 2488
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    6:
      x: 2591
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    7:
      x: 2694
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    8:
      x: 2797
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    9:
      x: 2712
      "y": 1201
      width: 188
      height: 121
      groupedLed: false
    10:
      x: 2712
      "y": 1080
      width: 188
      height: 121
      groupedLed: false
    11:
      x: 2712
      "y": 959
      width: 188
      height: 121
      groupedLed: false
    12:
      x: 2712
      "y": 838
      width: 188
      height: 121
      groupedLed: false
    13:
      x: 2712
      "y": 717
      width: 188
      height: 121
      groupedLed: false
    14:
      x: 2712
      "y": 596
      width: 188
      height: 121
      groupedLed: false
    15:
      x: 2712
      "y": 475
      width: 188
      height: 121
      groupedLed: false
    16:
      x: 2712
      "y": 354
      width: 188
      height: 121
      groupedLed: false
    17:
      x: 2712
      "y": 233
      width: 188
      height: 121
      groupedLed: false
    18:
      x: 2712
      "y": 112
      width: 188
      height: 121
      groupedLed: false
    19:
      x: 2798
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    20:
      x: 2700
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    21:
      x: 2602
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    22:
      x: 2504
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    23:
      x: 2406
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    24:
      x: 2308
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    25:
      x: 2210
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    26:
      x: 2112
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    27:
      x: 2014
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    28:
      x: 1916
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    29:
      x: 1818
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    30:
      x: 1720
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    31:
      x: 1622
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    32:
      x: 1524
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    33:
      x: 1426
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    34:
      x: 1328
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    35:
      x: 1230
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    36:
      x: 1132
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    37:
      x: 1034
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    38:
      x: 936
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    39:
      x: 838
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    40:
      x: 740
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    41:
      x: 642
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    42:
      x: 544
      "y": 0
      width: 98
      height: 115
      groupedLed: false
    43:
      x: 540
      "y": 112
      width: 188
      height: 121
      groupedLed: false
    44:
      x: 540
      "y": 233
      width: 188
      height: 121
      groupedLed: false
    45:
      x: 540
      "y": 354
      width: 188
      height: 121
      groupedLed: false
    46:
      x: 540
      "y": 475
      width: 188
      height: 121
      groupedLed: false
    47:
      x: 540
      "y": 596
      width: 188
      height: 121
      groupedLed: false
    48:
      x: 540
      "y": 717
      width: 188
      height: 121
      groupedLed: false
    49:
      x: 540
      "y": 838
      width: 188
      height: 121
      groupedLed: false
    50:
      x: 540
      "y": 959
      width: 188
      height: 121
      groupedLed: false
    51:
      x: 540
      "y": 1080
      width: 188
      height: 121
      groupedLed: false
    52:
      x: 540
      "y": 1201
      width: 188
      height: 121
      groupedLed: false
    53:
      x: 540
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    54:
      x: 643
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    55:
      x: 746
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    56:
      x: 849
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    57:
      x: 952
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    58:
      x: 1055
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    59:
      x: 1158
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
    60:
      x: 1261
      "y": 1325
      width: 103
      height: 115
      groupedLed: false
splitBottomRow: true
configVersion: "2.11.7"
serialPort: "GLOW_WORM_ESP8266_8244"
wifiEnable: true
mqttStream: true
extendedLog: "INFO"

Relevant log output

[Instance #1] 2023-07-11 23:47:33,656 INFO o.d.JavaFXStarter [main] Starting default instance
[Instance #1] 2023-07-11 23:47:33,659 INFO o.d.NativeExecutor [main] /usr/share/applications/fireflyluciferin-FireflyLuciferin.desktop
[Instance #1] 2023-07-11 23:47:34,133 INFO o.d.g.ImageProcessor [JavaFX Application Thread] GStreamer path in use=home/neodymium/repos/firefly_luciferin/src/main/resources
[Instance #1] 2023-07-11 23:47:34,242 INFO o.d.m.PipelineManager [JavaFX Application Thread] ximagesrc startx=1 endx=3439 starty=0 endy=1439 ! videoscale ! videoconvert
[Instance #1] 2023-07-11 23:47:34,346 INFO o.d.m.UpgradeManager [JavaFX Application Thread] Checking for Firefly Luciferin Update
[Instance #1] 2023-07-11 23:47:34,668 INFO o.d.FireflyLuciferin [JavaFX Application Thread] MQTT disabled.
[Instance #1] 2023-07-11 23:47:34,672 INFO o.d.n.t.UdpServer [JavaFX Application Thread] Local IP= 192.168.100.8
[Instance #1] 2023-07-11 23:47:34,673 INFO o.d.n.t.UdpServer [JavaFX Application Thread] Network adapter in use=enp34s0
[Instance #1] 2023-07-11 23:47:34,673 INFO o.d.n.t.UdpServer [JavaFX Application Thread] Broadcast address found=/192.168.100.255
[Instance #1] 2023-07-11 23:47:34,676 INFO o.d.m.PowerSavingManager [JavaFX Application Thread] Adding hook for power saving.
[Instance #1] 2023-07-11 23:47:35,688 INFO o.d.m.PipelineManager [pool-11-thread-1] Waiting device for my instance...
[Instance #1] 2023-07-11 23:47:36,638 INFO o.d.m.DisplayManager [JavaFX Application Thread] Width: 3440.0 Height: 1440.0 Scaling: 1.0 MinX: 0.0 MinY: 0.0
[Instance #1] 2023-07-11 23:47:36,679 INFO o.d.m.PipelineManager [pool-11-thread-1] Waiting device for my instance...
[Instance #1] 2023-07-11 23:47:37,679 INFO o.d.m.PipelineManager [pool-11-thread-1] Waiting device for my instance...
[Instance #1] 2023-07-11 23:47:38,679 INFO o.d.m.PipelineManager [pool-11-thread-1] Waiting device for my instance...
[Instance #1] 2023-07-11 23:47:39,679 INFO o.d.m.PipelineManager [pool-11-thread-1] Waiting device for my instance...
[Instance #1] 2023-07-11 23:47:40,679 INFO o.d.m.PipelineManager [pool-11-thread-1] Waiting device for my instance...
[Instance #1] 2023-07-11 23:47:41,679 INFO o.d.m.PipelineManager [pool-11-thread-1] Waiting device for my instance...
[Instance #1] 2023-07-11 23:47:42,679 INFO o.d.m.PipelineManager [pool-11-thread-1] Waiting device for my instance...
[Instance #1] 2023-07-11 23:47:45,243 INFO o.d.g.GrabberManager [gstreamer service thread 1] Starting a new pipeline
[Instance #1] 2023-07-11 23:47:47,243 INFO o.d.g.GrabberManager [gstreamer service thread 1] Restarting pipeline
[Instance #1] 2023-07-11 23:47:49,668 INFO o.d.m.UpgradeManager [pool-4-thread-1] Checking for Glow Worm Luciferin Update
[Instance #1] 2023-07-11 23:47:59,243 INFO o.d.g.GrabberManager [gstreamer service thread 1] Free up system memory
[Instance #1] 2023-07-11 23:48:07,243 INFO o.d.g.GrabberManager [gstreamer service thread 1] Starting a new pipeline
[Instance #1] 2023-07-11 23:48:13,530 INFO o.d.m.StorageManager [JavaFX Application Thread] Cleaning old config
[Instance #1] 2023-07-11 23:48:23,243 INFO o.d.g.GrabberManager [gstreamer service thread 1] Free up system memory
[Instance #1] 2023-07-11 23:48:34,949 INFO o.d.m.StorageManager [JavaFX Application Thread] Cleaning old config

How to reproduce

Start the app on any GNU/Linux distro running Wayland display server.

tarlomitico commented 10 months ago

are there any updates for wayland?

sblantipodi commented 10 months ago

@tarlomitico not yet, wayland destroyed the way you can screen capture and made a new way that uses DBUS... big part of the code must be rewritten for wayland... help is welcomed...