A full desktop environment for Linux/Unix using Fyne

Overview

GoDoc Reference 0.1.3 release Join us on Slack
Code Status Build Status Coverage Status

About

FyneDesk is an easy to use Linux/Unix desktop environment following material design. It is build using the Fyne toolkit and is designed to be easy to use as well as easy to develop. We use the Go language and welcome any contributions or feedback for the project.

Dependencies

For a full desktop experience you will also need the following external tools installed:

  • xbacklight
  • arandr

Getting Started

Using standard go tools you can install FyneDesk using:

go get fyne.io/fynedesk/cmd/fynedesk

Once installed you can run the following commands from the root of the installed fynedesk folder (usually $GOPATH/src/fyne.io/fynedesk/) to set up fynedesk as a selectable desktop option in your login manager (such as LightDM for example).

make
sudo make install

You can also run it in an embedded X window for testing using:

make embed

It should look like this:

Fyne Desktop - Dark

If you run the command when there is a window manager running, or on an operating system that does not support window managers (Windows or macOS) then the app will start in UI test mode. When loaded in this way you can run all of the features except the controlling of windows - they will load on your main desktop.

Runner

A desktop needs to be rock solid and, whilst we are working hard to get there, any alpha or beta software can run in to unexpected issues. For that reason we have included a fynedesk_runner utility that can help manage unexpected events. If you start the desktop using the runner then if a crash occurs it will normally recover where it left off with no loss of data in your applications.

Using standard go tools you can install the runner using:

go get fyne.io/fynedesk/cmd/fynedesk_runner

From then on execute that instead of the fynedesk command for a more resillient desktop when testing out pre-release builds.

Issues
  • Aplications runner should allow all apps inside $PATH

    Aplications runner should allow all apps inside $PATH

    At home I've got fyne_demo in ~/go/bin ; intellij in ~/bin/idea everything is in my $PATH but I can't access it using the runner, we shouldn't need a terminal to launch them

    question 
    opened by mattboll 22
  • go build fails: undefined: wm.NewX11WindowManager, undefined: wm.NewX11ScreensProvider

    go build fails: undefined: wm.NewX11WindowManager, undefined: wm.NewX11ScreensProvider

    [email protected]$ uname -a
    FreeBSD FreeBSD 12.1-RELEASE-p8 FreeBSD 12.1-RELEASE-p8 GENERIC  amd64
    
    [email protected]$ go version
    go version go1.14.7 freebsd/amd64
    
    [email protected]$ go build -v fyne.io/fynedesk/cmd/fynedesk
    fyne.io/fynedesk/cmd/fynedesk
    # fyne.io/fynedesk/cmd/fynedesk
    go/src/fyne.io/fynedesk/cmd/fynedesk/main_unix.go:18:14: undefined: wm.NewX11WindowManager
    go/src/fyne.io/fynedesk/cmd/fynedesk/main_unix.go:23:39: undefined: wm.NewX11ScreensProvider
    
    opened by probonopd 15
  • On FreeBSD /usr/include/sys/_lock.h:38:2: error: unknown type name 'u_int'

    On FreeBSD /usr/include/sys/_lock.h:38:2: error: unknown type name 'u_int'

    here is the full error

    > go get fyne.io/fynedesk/cmd/fynedesk
    go get: installing executables with 'go get' in module mode is deprecated.
    	Use 'go install [email protected]' instead.
    	For more information, see https://golang.org/doc/go-get-install-deprecation
    	or run 'go help get' or 'go help install'.
    # github.com/go-gl/glfw/v3.3/glfw
    In file included from go/pkg/mod/github.com/go-gl/glfw/v3.3/[email protected]/native_linbsd.go:10:
    In file included from go/pkg/mod/github.com/go-gl/glfw/v3.3/[email protected]/glfw/include/GLFW/glfw3native.h:114:
    In file included from /usr/local/include/GL/glx.h:32:
    /usr/local/include/GL/gl.h:56:11: warning: 'GLAPIENTRY' macro redefined [-Wmacro-redefined]
    go/pkg/mod/github.com/go-gl/glfw/v3.3/[email protected]/glfw/include/GLFW/glfw3.h:5863:10: note: previous definition is here
    # github.com/godbus/dbus/v5
    In file included from go/pkg/mod/github.com/godbus/dbus/[email protected]/transport_unixcred_freebsd.go:13:
    In file included from /usr/include/sys/ucred.h:39:
    /usr/include/sys/_lock.h:38:2: error: unknown type name 'u_int'
            u_int   lo_flags;
            ^
    /usr/include/sys/_lock.h:39:2: error: unknown type name 'u_int'
            u_int   lo_data;                /* General class specific data. */
            ^
    In file included from go/pkg/mod/github.com/godbus/dbus/[email protected]/transport_unixcred_freebsd.go:13:
    In file included from /usr/include/sys/ucred.h:40:
    /usr/include/sys/_mutex.h:49:11: error: unknown type name 'uintptr_t'
            volatile uintptr_t      mtx_lock;       /* Owner and flags. */
                     ^
    /usr/include/sys/_mutex.h:63:11: error: unknown type name 'uintptr_t'
            volatile uintptr_t      mtx_lock;       /* Owner and flags. */
                     ^
    4 errors generated.
    
    
    opened by ericbsd 13
  • Feature/printscreen

    Feature/printscreen

    Add print screen features

    • PrintScreen button captures all displays
    • Shift+PrintScreen captures the current window with border.

    The images are generated in the windowmanager code but our UI overlay then presents it to the user and offers to save.

    opened by andydotxyz 13
  • Enable staticcheck and fix all issues

    Enable staticcheck and fix all issues

    This PR makes sure to get all the issues reported by staticcheck fixed and marks the ones that can't be fixed to be ignored for now (waiting for Fyne 2.0.0 mostly). It should now be possible to set the GitHub action to be required :+1:

    opened by Jacalz 9
  • handle chrome apps

    handle chrome apps

    I use videostream, which is a "chrome app" https://chrome.google.com/webstore/detail/videostream-for-google-ch/cnciopoikihiagdjbjpnocolokfelagl?hl=en

    If I use the applications launcher, I can't find the app when I type "videostream" (it works with gnome) When I run the app, it does not appear in the bottom app bar and it misses an icon on alt-tab

    enhancement 
    opened by mattboll 8
  • Support (configurable) key bindings for modules etc

    Support (configurable) key bindings for modules etc

    This is a work in progress towards proper key bindings.

    • [x] Started with allowing code to declare shortcuts...
    • [x] Moving through modules so they can declare shortcuts.
    • [x] Added a settings UI to list shortcuts

    TODO

    • [x] Reset bindings when modules are loaded / unloaded
    • [ ] Make these bindings configurable in settings

    Will fix #37

    opened by andydotxyz 8
  • Half working left or right toolbar button pos

    Half working left or right toolbar button pos

    This is unfortunately as far as I could get on my own. There are various issues that I have been unable to solve.

    • The windows do not resize correctly when using right position.

    • Already open windows do not update when applying the setting in settings.

    • The correct selected values are not shown in settings on start. Seems to be an issue in the clock as well so not related to this PR, I guess.

    opened by Jacalz 7
  • Allow to resize window that overflows

    Allow to resize window that overflows

    sometimes windows are too big for the screen (an other issue could be open for that) AFAIK there is only one way to reduce height of window, and if the bottom bar is out of the screen because the app overflows, then we can't do it anymore.

    We could add a shortcut such as alt-click or alt-F7 to move window over the top to be able to grab the bottom or we could allow to grab the top border to resize.

    Both solution should be implemented from my point of view

    enhancement Hacktoberfest 
    opened by mattboll 7
  • Feature/appcache

    Feature/appcache

    Caching the app entries we find. This was some development code that is really required for macOS as the lookup is so slow. Should we add it to Linux/BSD code too? What should it's refresh strategy be?

    opened by andydotxyz 6
  • Window move is very slow with Jetbrains apps or items that cover it's window

    Window move is very slow with Jetbrains apps or items that cover it's window

    This was better a few weeks ago - I think it has slowed down since the XRandR code additions.

    Drag any window, move it around the desktop, notice a significant lag in where the window is to where the pointer has moved to.

    opened by andydotxyz 6
  • Add Systray (AppIndicator DBus spec) module

    Add Systray (AppIndicator DBus spec) module

    Starting Systray support - works with Fyne apps but a few things still to do

    TODO

    • [x] Support submenus
    • [x] Fix Slack (and some libappindicator apps missing menus)
    • [ ] Find a way to add tests
    • [x] Support minibar if it gets merged (1 column instead of 5?)

    Fixes #52

    Checklist:

    • [ ] Tests included.
    • [x] Lint and formatter run with no errors.
    • [x] Tests all pass.
    opened by andydotxyz 0
  • Compilation instructions are incomplete

    Compilation instructions are incomplete

    Describe the bug:

    Currently, we have a list of runtime prerequisites, but no compile-time prerequisites. Having golang, git, and make installed before attempting to compile are easy assumptions to make, but the following are also required:

    • libx11-dev
    • libxcursor-dev
    • libxrandr-dev
    • libxinerama-dev
    • libxcb-xinput-dev
    • libxi-dev
    • libgl-dev
    • libxxf86vm-dev

    To Reproduce:

    Steps to reproduce the behaviour:

    1. Install ubuntu desktop
    2. Install git, make, and golang
    3. Follow the instructions in the readme

    Is this something worth adding to the readme?

    opened by taigrr 1
  • Feature request : hibernate

    Feature request : hibernate

    We should be able to suspend to disk on laptop, I'm used to a few scenarios :

    • when low battery
    • when screen is locked and laptop not plugged-in for 5 min
    • when action is triggered by menu or shortcut
    opened by mattboll 0
  • Feature requests: from the point of a simple user

    Feature requests: from the point of a simple user

    This is my suggestions and how often I use some features:

    • Option for avoiding of stealing focus by the applications being started - eg. I click 10 applications to open. While opening, I choose one to work; all the rest should open in background and if any interaction is required, task bar tab should only flash. It's different than "Always on top" because I need to select the window and the option; unfortunately new apps steals the focus from the window, and again from the beginning! Daily
    • File manager Daily (although could be a third app)
    • Network manager with hotspot (KDE is awesome, good and fast, only a couple of clicks away from establishing an anonymous access) Daily
    • Support of multiple task/toolbars Once (after OS installation and maybe after the installation of an app)
    • Built-in menu editor Once (after OS installation and maybe after the installation of an app)

    Extra customization:

    • background image once (after OS installation)
    • some applets, etc once (a year)
    • others (maybe never)

    Tia and good luck!

    PS: Discussions will be very helpful, if activated.

    question 
    opened by GHNewbiee 3
  • Add option to change mouse sensitivity

    Add option to change mouse sensitivity

    I'm using a touchpad right now and the mouse speed is slow, I need to move my finger several times through the touchpad to go from a border to another

    opened by mattboll 3
Releases(v0.3.0)
  • v0.3.0(Dec 19, 2021)

    Various feature additions alongside support for the compton compositor and a new menu make this FyneDesk feel much smoother :). We hope you like this update which also contains many speed and stability improvements.

    Added

    • Basic compositor support using compton backend
    • Support brightnessctl support to brightness module
    • Add a helper menu to each window
    • Add network status module that uses connman-gtk to configure
    • Add support for starting the Fyne Calculator (if installed) using the "calc" button on supported keyboards

    Changed

    • Default terminal is now fyneterm (if installed) :)
    • Update Fyne to 2.1 and refresh UI to match
    • Improved switcher UI
    • Re-designed the main menu to include links to standard apps

    Fixed

    • Show 1.0 as default scale in Advanced settings page if none set
    • Closing windows could leak resources to invisible windows
    • Don't drag the window if tap starts on a button
    • Global shortcuts did not work in some windows and menus
    • Improved stability when switching apps or showing many windows
    • Compilation on FreeBSD 13 failed due to dbus issue
    • Removed FreeBSD requirement on installed glfw library dependency
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Mar 22, 2021)

    This is the second major release of FyneDesk in which we added lots of new APIs for modules, keyboard shortcuts and general window management. There are a lot of new features like notifications, sound management and print screen, for the full list see below!

    Added

    • Support for desktop notifications
    • Created API for writing modules that plug in to FyneDesk
    • Add keyboard shortcut support for modules
    • Add volume control using pulseaudio
    • Print screen support for desktop and window capture
    • Crash logs are now saved before runner restarts the desktop
    • Add urls, calculations and sound/brightness to launcher
    • Add support for XPM icon format
    • Double tap title bar to maximise
    • Hover effects for window borders
    • Add option to use 24h time
    • Add support for "fake" transparency in X apps
    • Drag border to exit un-maximize
    • Support choosing between Alt and Win key for shortcuts
    • Add AC power indicator to battery module
    • Add option to change border button position

    Changed

    • Updated to latest Fyne theme
    • Updated multi-monitor support
    • Bar icons can be added and removed from a new right-click menu
    • Move to makefile for system installation
    • Search user's local directory for applications
    • New Swedish Pine wallpaper by @Jacalz
    • Better support for running in virtual machines
    • Improved background selection for settings
    • Account menu now appears over windows

    Fixed

    • Communicate the desktop DPI for better support in apps not using GTK, Qt or EFL
    • When starting with multiple screens that are not configured they overlap strangely (#129)
    • Update scaling per-screen for Qt apps
    • Drag and drop in Chrome browser (#156)
    • Firefox does not enter Fullscreen (#110)
    • Icon bar flicker when hovering
    • Add BSD support for all status modules
    • Fix 12h time format (#145)
    • Killing Xorg with fynedesk_runner will not exit cleanly (#137)
    • Menu opens with 0 height (#114)
    • Allow resize from top corners (#113)
    • Windows can be slow to move around (#165)
    • Crash on fast alt-tab (#122)
    • alt-space not reliable (#160)
    • Moving windows on external screens shows screen tearing (#161)
    • Applications can push other ones off the screen (#163)
    • Reduce load/reload time by around 50%
    Source code(tar.gz)
    Source code(zip)
  • v0.1.3(Apr 15, 2020)

    The 0.1.3 release brings many window related bug fixes and graphical tweaks to the 0.1 release.

    Added

    • Initial support for BSD systems

    Changed

    • Improved wording for account menu in embedded mode
    • Simpler app bar configuration screen
    • Updated default background for a winter scene
    • Renamed package to fyne.io/fynedesk and repository to github.com/fyne-io/fynedesk

    Fixed

    • GoLand editor loses focus on mouse click (#69)
    • Fix a flicker on window borders when uncovered (#83)
    • Respect the min and max hints of windows (#85)
    • Update to latest Fyne release to match new scale calculations
    • Drag and drop targets not found for many applications (#49)
    • VLC opens a lot of windows (#70)
    • Graphical glitches when Qt apps when scale < 1.0
    • Improve loading of macOS apps and icons in embedded mode on darwin
    Source code(tar.gz)
    Source code(zip)
  • v0.1.1(Dec 30, 2019)

    Bug fix release on 0.1

    Features

    • Added key bindings for app launcher (open with Alt-Space)
    • Add an about screen for FyneDesk

    Fixed

    • Issue where application menus may not be aligned in maximised or full screen
    • Fix crash if right clicking app launcher input field
    • Correct issue where icon list may not be saved from settings
    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Dec 23, 2019)

    This first release introduces the FyneDesk project to the Linux community. FyneDesk is a full X11 window manager that can be used in place of software like Gnome or KDE. Using the Fyne project means that it uses scalable vector graphics throughout whilst providing excellent performance and stability.

    Features

    • X11 window management and window borders
    • Alt-Tab stack cycling for switching applications
    • Application launcher
    • Task and launch icon bar
    • Battery and screen brightness controls
    • Light and Dark themes
    • Multiple monitor support
    Source code(tar.gz)
    Source code(zip)
  • v0.1.0-alpha(Oct 15, 2019)

    This is the first (pre-)release of our desktop project, it is a functional and usable, but simple, desktop environment. We're looking for feedback and contributions to get to 0.1 release which should be highly robust and performant as well :)

    Features

    • X11 window management features (move, resize, iconify, maximize, fullscreen)
    • App launcher and task manager icon bar
    • Widget bar with date, time, brightness controls and battery indicator
    • App launcher
    • Theme switcher

    Development tools

    To help with development the desktop can also run in "embedded mode" to test and run all features that are not window management - just run it like a normal app :)

    Any bugs, suggestions or feedback welcome as issues in the 0.1 milestone.

    Source code(tar.gz)
    Source code(zip)
An example desktop system tray application that can launch HTML5 windows. Go source with a build process for Windows, Mac and Linux.

ExampleTrayGUI An example cross-platform (Mac, Windows, Linux) system tray application that can launch HTML5 windows, developed in Go including functi

Grant Moore 48 Jun 20, 2022
An example desktop system tray application that can launch HTML5 windows. Go source with a build process for Windows, Mac and Linux.

An example cross-platform (Mac, Windows, Linux) system tray application that can launch HTML5 windows, developed in Go including functional build process. This repository is intended as a quick reference to help others start similar projects using the referenced libraries and will not be actively maintained.

Grant Moore 48 Jun 20, 2022
An example desktop system tray application that can launch HTML5 windows. Go source with a build process for Windows, Mac and Linux.

ExampleTrayGUI An example cross-platform (Mac, Windows, Linux) system tray application that can launch HTML5 windows, developed in Go including functi

Owen Moore 48 Jun 20, 2022
Create desktop apps using Go and Web Technologies.

Build desktop applications using Go & Web Technologies. The traditional method of providing web interfaces to Go programs is via a built-in web server

Wails 10k Jul 27, 2022
Example Go desktop app using HTML

webview-example This repo contains an example/starter for building a webview app

Jessie 4 Jun 14, 2022
Build cross-platform modern desktop apps in Go + HTML5

Lorca A very small library to build modern HTML5 desktop apps in Go. It uses Chrome browser as a UI layer. Unlike Electron it doesn't bundle Chrome in

Serge Zaitsev 7.4k Aug 1, 2022
gosx-notifier is a Go framework for sending desktop notifications to OSX 10.8 or higher

gosx-notifier A Go lib for sending desktop notifications to OSX Mountain Lion's (10.8 or higher REQUIRED) Notification Center. Update 4/3/2014 On OSX

Ralph Caraveo III 573 Jul 27, 2022
A Go (golang) Custom Flutter Engine Embedder for desktop

Go Flutter desktop embedder ⚠️ Warning: this project has been moved to its own organization. Please take a look at its new location: github.com/go-flu

Pierre Champion | Drakirus 96 Jul 23, 2022
A unified graphical user experience toolkit for Go desktop applications

Unison A unified graphical user experience toolkit for Go desktop applications. macOS, Windows, and Linux are supported. Required setup Unison is buil

Richard Wilkes 15 Aug 1, 2022
Ps4gdb desktop - PS4GDB consists of two components

PS4GDB PS4GDB consists of two components. The first component is the gdbstub run

Mr. Nobody 17 Jun 21, 2022
Qt binding for Go (Golang) with support for Windows / macOS / Linux / FreeBSD / Android / iOS / Sailfish OS / Raspberry Pi / AsteroidOS / Ubuntu Touch / JavaScript / WebAssembly

Introduction Qt is a free and open-source widget toolkit for creating graphical user interfaces as well as cross-platform applications that run on var

null 9.4k Aug 8, 2022
Flutter on Windows, MacOS and Linux - based on Flutter Embedding, Go and GLFW.

go-flutter - A package that brings Flutter to the desktop Purpose Flutter allows you to build beautiful native apps on iOS and Android from a single c

null 5.4k Jul 31, 2022
Linux port of tailscale system tray menu.

tailscale-systray Linux port of tailscale system tray menu. Usage $ tailscale-systray Requirements tailscale Installation Building app require gcc, l

mattn 100 Jul 21, 2022
Proof-of-concept Windows-like clipboard manager for Linux in Go

Goclip Simple Windows-like clipboard manager for linux. This application is just a proof-of-concept and might be highly unstable. Features Clipboard t

null 2 Jan 28, 2022
Pacz - Arch Linux package searcher with fzf-like UI

pacz pacz is an Arch Linux fuzzy searcher with fzf-like UI. This repository is s

sheepla 2 Apr 3, 2022
Compute shader in GO (using go-gl/glfw)

shadr (compute shader using go-gl/glfw) structure main.go contains intialisation

null 1 Jan 20, 2022
Idiomatic Golang GUI using Lorca

Dali Summary Dali is a pure Golang library built on lorca in order to provide Go developers a way to create GUI-based applications using idiomatic Go.

Matthew Peters 8 Jul 11, 2022
W32find - Find parent windows and their children windows using win32api.

w32find Package w32find provides a set of interface to win32 APIs that can be used to find windows and their controls. Install go get -v github.com/mo

MoonChant 0 Jan 5, 2022
A Fyne login manager for linux desktop computers

Fin, the Fyne Login Manager This app is in it's very early stages and has only been tested with pam and systemd to log in users with a .xinitrc file.

Fyne.io 13 Jun 21, 2022
Calculator-with-Fyne - A Fyne calculator with a GUI

Calculator Basic calculator for learning Fyne and honing Go skills. Installation

Furkan KARACA 2 Apr 26, 2022
go.pipeline is a utility library that imitates unix pipeline. It simplifies chaining unix commands (and other stuff) in Go.

go.pipeline go.pipeline is a utility library that imitates unix pipeline. It simplifies chaining unix commands (and other stuff) in Go. Installation g

Song Gao 14 May 8, 2022
ClashWebLite is a cross-platform lightweighted wrapper for Clash Premium on Desktop environment.

ClashWebLite ClashWebLite is a cross-platform lightweighted wrapper for Clash Premium on Desktop environment. http://127.0.0.1:9090/ui: Features Suppo

null 46 Jul 12, 2022
An example desktop system tray application that can launch HTML5 windows. Go source with a build process for Windows, Mac and Linux.

ExampleTrayGUI An example cross-platform (Mac, Windows, Linux) system tray application that can launch HTML5 windows, developed in Go including functi

Grant Moore 48 Jun 20, 2022
An example desktop system tray application that can launch HTML5 windows. Go source with a build process for Windows, Mac and Linux.

ExampleTrayGUI An example cross-platform (Mac, Windows, Linux) system tray application that can launch HTML5 windows, developed in Go including functi

Grant Moore 48 Jun 20, 2022
An example desktop system tray application that can launch HTML5 windows. Go source with a build process for Windows, Mac and Linux.

An example cross-platform (Mac, Windows, Linux) system tray application that can launch HTML5 windows, developed in Go including functional build process. This repository is intended as a quick reference to help others start similar projects using the referenced libraries and will not be actively maintained.

Grant Moore 48 Jun 20, 2022
An example desktop system tray application that can launch HTML5 windows. Go source with a build process for Windows, Mac and Linux.

ExampleTrayGUI An example cross-platform (Mac, Windows, Linux) system tray application that can launch HTML5 windows, developed in Go including functi

Owen Moore 48 Jun 20, 2022
A chess GUI build using the Fyne toolkit.

Chess The subject of my current live stream series. A simple chess UI built with Fyne. Thanks to: Chess Go library by Logan Spears github.com/notnil/c

Andy Williams 28 Jun 16, 2022
Cross-platform, multi-server chat app built using Fyne

Fibro Really early days proof of concept for a cross-platform multi-server chat. Feel free to play, but don't expect it to do much! Features Multiple

Andy Williams 21 Jun 16, 2022
This is a Virtual Operating System made by using GOLANG and FYNE.

Virtual-Operating-System This is a Virtual Operating System made by using GOLANG and FYNE. Hello! All In this project I have made a virtual Operating

SURBHI SINHA 1 Nov 1, 2021