Giter Club home page Giter Club logo

lcarswm's Introduction

lcarswm

lcarswm or LCARS Window Manager is a window manager written in Kotlin that is designed to look like an LCARS interface.

lcarswm has two kinds of monitors, one primary monitor (which maps to the X primary monitor) and "other" monitors. Only the primary screen has the upper (currently empty) information area and the side bar that shows the app menu. The information area and the app menu are only visible in the normal screen mode. There are three screen modes:

  • Normal mode: app menu and information area on the primary screen, upper and lower bars on the other screens
  • Maximized mode: upper and lower bars on all screens
  • Fullscreen mode: no bars, windows are maximized

If there's no primary screen defined in the X server, then lcarswm will use the first monitor it finds as primary.

lcarswm is a stacking window manager and displays one window at a time per screen. Windows always open on the primary monitor and can be moved to other monitors with keyboard short cuts.

So far the window manager interaction is mostly based on key commands, as listed below. However windows can also be switched and closed using mouse actions by either clicking on the window or using the application menu.

The window manager's application menu is displayed in the main bar on the primary monitor in normal mode. The application menu shows all open windows and can be used to select windows or close them with mouse actions.

Checkout https://www.andreas-tennert.de/#2-0006 for images :-)

Copyright

Copyright (C) 2019 Andreas Tennert

Acknowledgements

Thank you very much to the creators of the following resources:

Functionality

  • Window title bar, with window name and different colors for active and inactive windows
  • App menu in the normal screen mode on the primary screen that lists all active windows with
    • a window selection button (blue with program name)
    • a close button (red, small without text)
  • Windows are resized when the screen resolution is changed and the size depends on the window manager mode.
  • Windows are always opened on the primary monitor
  • If a monitor is removed, it's windows are moved to the primary monitor
  • Autostart applications from *.desktop files in /etc/xdg/autostart/ and ~/.config/autostart/
  • The settings file contains key handling and general settings per user and is created as ~/.config/lcarswm/settings.xml if it doesn't exist and can be edited afterwards
    • Key handling
      • Windows + Q closes the window manager
      • Windows + M toggles the display mode between normal, maximized and fullscreen
      • Alt + Tab toggles through the windows
      • Alt + Shift + Tab toggles backwards through the windows
      • Alt + Windows + Up/Down moves the active window to other monitors
      • Alt + F4 closes the active window
      • Other key combinations can be connected to commands via a settings file
      • Modifier keys are
        • Shift
        • Ctrl
        • Alt
        • Win / Lin / Super
        • Meta
        • Hyper
      • By clicking and holding a window title bar with the left mouse button and dragging the window can be moved between monitors
    • General settings
      • title: title that is displayed in the top bar in normal and maximized mode
      • title-image: optional, path to image in XPM format, if set, it will be shown instead of the title. Should have a height of 40px and be at least 16px shorter then the normal modes' top bar.
      • font: the font used for drawing the title and the window titles

Required

For compiling

  • header files and development libraries for XLib, randr, xpm, libxml2, glib and pango. Check the circle ci config file to find the build dependencies in the install routines for Ubuntu.

For using

  • Ubuntu Condensed font: It comes close enough to LCARS letters and is used by lcarswm as default for writing.
  • Libraries for XLib, randr, xpm, libxml2, glib and pango. Check the circle ci config file for details via the corresponding dev libs.
  • Python 3.8 with Python 3 PyGObject, posix-ipc, numpy, psutil and pyalsaaudio packages for the app menu
  • The applications for the default keybindings are recommended in the debian setup and are xterm, firefox and alsa-utils (amixer). The default application key bindings are
    • Lin+T -> xterm
    • Lin+B -> firefox (B for browser)
    • Audio-keys -> amixer ... (mute toggle, louder, quieter)

Credits

Original author: Andreas Tennert
Current author: Andreas Tennert

lcarswm's People

Contributors

atennert avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

blacklightpy

lcarswm's Issues

Header and footer bars only. "Mode" button on top left of header bar and LCARS on the right. No other content.

While testing after install, I the only items presented on the screen was a header bar with "MODE" on the Left and "LCARS" on the right along with an empty footer bar.
IMG_20240305_083342
I'm using Ubuntu 22.04.

My first step to troubleshooting was to ensure that all of the dependencies were installed:

libpango1.0-0 is already at the latest version 1.50.6+ds-2ubuntu1
libpangoxft-1.0-0 is already at the latest version 1.50.6+ds-2ubuntu1
libx11-6 is already at the latest version 2:1.7.5-1ubuntu0.3
libxml2 is already at the latest version 2.9.13+dfsg-1ubuntu0.4
libxpm4 is already at the latest version 1:3.5.12-1ubuntu0.22.04.2
libxrandr2 is already at the latest version 2:1.5.2-1build1
python3 is already at the latest version 3.10.6-1~22.04
python3-gi is already at the latest version 3.42.1-0ubuntu1

I also reread through the installation and manual instructions several time thinking I might have missed something. If I have, I can't find it and now I need help.
Here is the lcarswm.log from today's attempt:
lcarswm.log

Please let me know what other information I can provide so we can get this resolved. Thank you in advance for your help.

No dynamic display scaling

From #13: it seems that the display scaling is set by default and can't be changed, which makes work on high resolution monitors difficult on the eyes. I guess one can increase the icon size, but that would be a stop-gap measure.

Linker fails on Fedora 33

Task :linkDebugExecutableNative FAILED
e: /root/.konan/dependencies/clang-llvm-8.0.0-linux-x86-64/bin/ld.lld invocation reported errors

The /root/.konan/dependencies/clang-llvm-8.0.0-linux-x86-64/bin/ld.lld command returned non-zero exit code: 1.
output:
ld.lld: error: unable to find library -lX11
ld.lld: error: unable to find library -lXpm
ld.lld: error: unable to find library -lXrandr
ld.lld: error: unable to find library -lglib-2.0
ld.lld: error: unable to find library -lpango-1.0
ld.lld: error: unable to find library -lpangoxft-1.0
ld.lld: error: unable to find library -lXft
ld.lld: error: unable to find library -lxml2

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':linkDebugExecutableNative'.

Compilation finished with errors

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 15s
4 actionable tasks: 4 executed
cp: cannot stat './build/bin/native/releaseExecutable/lcarswm.kexe': No such file or directory
cp: cannot stat './src/nativeMain/resources/usr/': No such file or directory
cp: cannot stat './src/nativeMain/resources/etc/
': No such file or directory

I have the libraries installed:

libX11.so  libX11.so.6  libX11.so.6.3.0
libXpm.so  libXpm.so.4  libXpm.so.4.11.0
libXrandr.so  libXrandr.so.2  libXrandr.so.2.2.0

etc. etc.
They're all in /lib64 which links to /usr/lib64
not sure how to tell the linker where to find them

Session crash during initialization

Description

When I call it from the terminal, lcarswm

/usr/bin/lcarswm

the program aborts with the message:

INFO: ::runWindowManager::start lcarswm initialization
DEBUG: RandrHandlerFactory::init::event base: 89, error base: 147
ERROR: ::runWindowManager::unable to load settings

I find the same behavior both from the precompiled package https://github.com/lcarsde/lcarswm/releases/download/22.1/lcarswm_22.1_amd64.deb as from the locally compiled master branch of the project.

Environment

OS: Ubuntu Mate - 21.10
Kernel: Linux 5.13.0-39-generic #44-Ubuntu SMP Thu Mar 24 15:35:05 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Processor: Intel i7 - 16GB RAM

toggle window list by latest used application

In the latest release the window toggling just goes with the order in which the windows were opened. That's confusing because everywhere else the latest used window matters.

Side quest: implement toggling backwards

Mouse pointer settings not respected

From #13: The mouse pointer speed is slower. I expected that these settings would be left to their default values, or maybe it is because of the display scaling settings...

Session management & startup

First of all, thank you so much for this wonderful wm! It not only looks great, but that it can be used for serious, focused and productive work is just amazing.
But when lcarswm is used paralel to another desktop environment, like xfce4, it now (22.1-1) loads a lot of unecessary or unwanted *.desktop files from the autostart folders, which are specific for other wm's. For example on my machine a couple of *.desktop files start the application minimized into the systray of xfce, like blueman, clipman, telegram, notes, etc, and are of no use to me in my lcarswm session.

I understand the transition to the default autostart folders, but is there a possibility, similar to xfce's session manager, to tell lcarswm manually which user specific *.desktop files not to load?

Race condition during start up?

2023-04-06 11:55:07 -  INFO: ::runWindowManager::start lcarswm initialization
2023-04-06 11:55:07 - DEBUG: RandrHandlerFactory::init::event base: 89, error base: 147
2023-04-06 11:55:07 - DEBUG: SettingsReader::init::using system settings
2023-04-06 11:55:07 - DEBUG: SettingsReader::loadSettings::loading settings from XML
2023-04-06 11:55:07 - DEBUG: read-config: Lin+T->xterm
2023-04-06 11:55:07 - DEBUG: read-config: Lin+B->firefox
2023-04-06 11:55:07 - DEBUG: read-config: XF86AudioMute->amixer set Master toggle
2023-04-06 11:55:07 - DEBUG: read-config: XF86AudioRaiseVolume->amixer set Master 3%+
2023-04-06 11:55:07 - DEBUG: read-config: XF86AudioLowerVolume->amixer set Master 3%-
2023-04-06 11:55:07 - DEBUG: read-config: Alt+Tab->window-toggle-forward
2023-04-06 11:55:07 - DEBUG: read-config: Alt+Shift+Tab->window-toggle-forward
2023-04-06 11:55:07 - DEBUG: read-config: Alt+Lin+Up->window-move-previous
2023-04-06 11:55:07 - DEBUG: read-config: Alt+Lin+Down->window-move-next
2023-04-06 11:55:07 - DEBUG: read-config: Alt+F4->window-close
2023-04-06 11:55:07 - DEBUG: read-config: Lin+M->screen-mode-toggle
2023-04-06 11:55:07 - DEBUG: read-config: Lin+Q->lcarswm-quit
2023-04-06 11:55:07 - DEBUG: ::startup::Screen size: 1920/1080, root: 480
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - DEBUG: ScreenChangeHandler::handleEvent::screen changed
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:07 - ERROR: ::startup::error code: 2
2023-04-06 11:55:08 - ERROR: ::runWindowManager::error starting lcarswm: Collection contains no element matching the predicate.
kotlin.NoSuchElementException: Collection contains no element matching the predicate.
    at 0   lcarswm.kexe                        0x497db9           kfun:de.atennert.lcarswm.monitor.MonitorManagerImpl#getPrimaryMonitor(){}de.atennert.lcarswm.monitor.Monitor + 649 
    at 1   lcarswm.kexe                        0x4aa2b6           kfun:de.atennert.lcarswm.window.ActiveWindowCoordinator#rearrangeActiveWindows(){} + 326 
    at 2   lcarswm.kexe                        0x482558           kfun:de.atennert.lcarswm.events.RandrHandlerFactory.object-1.handleEvent#internal + 56 
    at 3   lcarswm.kexe                        0x491f4f           kfun:de.atennert.lcarswm.lifecycle#startup(de.atennert.lcarswm.system.api.SystemApi;de.atennert.lcarswm.log.Logger;de.atennert.lcarswm.ResourceGenerator){}de.atennert.lcarswm.lifecycle.RuntimeResources? + 22783 
    at 4   lcarswm.kexe                        0x4b4862           kfun:$runWindowManager$lambda$1COROUTINE$4.invokeSuspend#internal + 1026 
    at 5   lcarswm.kexe                        0x4b4ca7           kfun:$runWindowManager$lambda$1COROUTINE$4.invoke#internal + 231 
    at 6   lcarswm.kexe                        0x44bbaf           kfun:kotlinx.coroutines#coroutineScope(kotlin.coroutines.SuspendFunction1<kotlinx.coroutines.CoroutineScope,0:0>){0ยง<kotlin.Any?>}0:0 + 399 
    at 7   lcarswm.kexe                        0x4b4168           kfun:$main$lambda$0COROUTINE$3.invokeSuspend#internal + 1224 
    at 8   lcarswm.kexe                        0x423980           kfun:kotlin.coroutines.native.internal.BaseContinuationImpl#resumeWith(kotlin.Result<kotlin.Any?>){} + 240 
    at 9   lcarswm.kexe                        0x45aebd           kfun:kotlinx.coroutines.DispatchedTask#run(){} + 637 
    at 10  lcarswm.kexe                        0x450d14           kfun:kotlinx.coroutines.EventLoopImplBase#processNextEvent(){}kotlin.Long + 8036 
    at 11  lcarswm.kexe                        0x4d291b           Init_and_run_start + 1611 
    at 12  lcarswm.kexe                        0x4d2dea           Konan_main + 10 
    at 13  libc.so.6                           0x7f8e58629d8f     0x0 + 140249344941455 
    at 14  libc.so.6                           0x7f8e58629e3f     __libc_start_main + 127 
    at 15  lcarswm.kexe                        0x417332           0x0 + 4289330 

Ubuntu 22.04 with gdm3

Amount of system memory needed for build

Hi I'm trying to build on a Raspberry Pi 4 w/ 4GB RAM.

Error occurred during initialization of VM
Could not reserve enough space for 3788800KB object heap

Available I think is something like 3.75. Is there anything I can do to build on this system?

Frames without content

Sometimes the frame of a closed windows stays present as an empty black window with the title "-". The frame itself can not be closed anymore, because the window of it is already gone. This has been seen happening when

  • closing dialog windows from SoftMaker Office / FreeOffice
  • exiting IntelliJ IDEA when multiple projects are opened
  • drag&drop from file manager into FreeOffice to import images

WM should stop and inform about other already running WM

From #13: I did not notice the startlcarswm script; it would be useful if it's mentioned in the manual that that is the one to use. Anyway, I ran it and... it was not good. The system immediately went into panic mode, display settings changed, and I was notified that the system detected a problem and that I should log off. The problems persisted and I had to restart to recover. If I ignore the error messages and close the dialogs which prompt me to send an error report, I can see that the wm starts, but does not load the rest of the functionality.

Make colors configurable

Make the colors for the window manager configurable

Side note:
clone this ticket into the other subprojects.

No click from touch pad

From #13: The touchpad does not click with a tap anymore, I have to actually click on it to click a button.

IllegalStateException upon startup

First of all, kudos for all the great work in putting this together, especially for Linux distros.

I have installed the provided .deb packages (running Ubuntu 20.04) and upon startup (assuming that to start one needs to run the lcarswm.kexe executable - something which is not clear from the manual btw), I get:

Uncaught Kotlin exception: kotlin.IllegalStateException: ::main::cache dir not set
at kfun:$main$lambda-0COROUTINE$3.invokeSuspend#internal (0x497a34)
at kfun:kotlin.coroutines.native.internal.BaseContinuationImpl#resumeWith(kotlin.Result<kotlin.Any?>){} (0x42757e)
at kfun:kotlinx.coroutines.DispatchedTask#run(){} (0x44a24f)
at kfun:kotlinx.coroutines.EventLoopImplBase#processNextEvent(){}kotlin.Long (0x43fc28)
at kfun:kotlinx.coroutines.BlockingCoroutine.joinBlocking#internal (0x44d248)
at Init_and_run_start (0x4c9e45)
at __libc_start_main (0x7f9dc96d10b3)
at (0x4079e1)
at ((nil))

Any ideas what's going on? Thanks.

Overlapping screens

When screens lay over one another they are not "merged" but draw over one another.

Lcarswm only shows the windows manager drawing and nothing else.

OK, after downloading and installing ALL deb files for Lcarsde, and also installing the 'Onboard' colors and theme, I logged out, and in the login screen I see, 'Lcars' so I switched to the Lcars windows manager, then logged in, now all I see is the frame and nothing else, where is the menu's, programs, logoff/on, shutdown, etc etc? I can't even logout to switch back to my original desktop. There's not even an instruction manual to get everything running. I had to reformat my HD and re-install Ubuntu and luckily, I made a backup, so now I got my desktop back, and I won't be installing Lcarswm until it's actually working.

WM overrides theme settings

From #13: I use a custom built Oomox-lcars theme for the appearance of windows, buttons, etc. and now the theme color and background in some applications is white/default. It can be changed in the settings, but I would have to change it back if I log into my default window manager.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.