A full desktop environment for Linux/Unix using Fyne

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.

Comments
  • 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

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

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

    user@FreeBSD$ uname -a
    FreeBSD FreeBSD 12.1-RELEASE-p8 FreeBSD 12.1-RELEASE-p8 GENERIC  amd64
    
    user@FreeBSD$ go version
    go version go1.14.7 freebsd/amd64
    
    user@FreeBSD$ 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
    
  • 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 pkg@version' 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.
    
    
  • 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.

  • 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:

  • 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

  • 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

  • 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.

  • 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

  • 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?

  • 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.

  • Extract backgrounds and modules to other repos for reusability

    Extract backgrounds and modules to other repos for reusability

    I am considering (and looking for feedback on) creating two new repos extracted from fynedesk.

    • backgrounds - our standard backgrounds, with a little Go code to help manage them - and in future to discover others installed
    • modules - things like battery, brightness etc that could be used in other apps (fin would like to show a subset of the fynedesk widget panel)

    This would allow more consistency and code sharing between apps doing desktop-y things. The backgrounds could bundle lots, or with tags provide a minimal setup - this would allow apps built for FyneDesk (or other well configured platforms) to bundle less in the UI if we know what is on the filesystem instead.

  • Add keyboard shortcuts for starting applications

    Add keyboard shortcuts for starting applications

    Is your feature request related to a problem? Please describe:

    Please provide a way to run applications through keyboard shorcuts. Eg, ctrl+alt+t should start a terminal.

  • Clicking on Firefox app does not start firefox

    Clicking on Firefox app does not start firefox

    Describe the bug:

    Unable to start firefox by clicking on firefox app in app drawer

    To Reproduce:

    Steps to reproduce the behaviour:

    1. Click on username in bottom right
    2. Click on network to expand the dropdown
    3. Click on Firefox Web Browser
    4. Firefox does not start
    5. Following error is seen in ~/.cache/fyne/io.fyne.fynedesk/fynedesk.log

    2022/12/23 14:54:56 At: /home/xxx/src/fynedesk/internal/x11/win/frame.go:282 2022/12/23 14:54:56 Fyne error: Put image error 2022/12/23 14:54:56 Cause: BadDrawable {NiceName: Drawable, Sequence: 6551, BadValue: 10497468, MinorOpcode: 0, MajorOpcode: 72} 2022/12/23 14:54:56 At: /home/xxx/src/fynedesk/internal/x11/win/frame.go:282 2022/12/23 14:54:56 Fyne error: X11 Error: 2022/12/23 14:54:56 Cause: BadGContext {NiceName: GContext, Sequence: 6558, BadValue: 10497470, MinorOpcode: 0, MajorOpcode: 62} 2022/12/23 14:54:56 At: /home/xxx/src/fynedesk/internal/x11/wm/desk.go:340

    Device (please complete the following information):

    • OS: Ubuntu Linux
    • Version: 22.04.1 LTS
    • Go version: 1.19.4
    • FyneDesk version: b6e12b57e7d4cd32303a7ec165a7451d33016636
  • Set global dark theme preference when switching theme

    Set global dark theme preference when switching theme

    Is your feature request related to a problem? Please describe:

    It is now common place in Gnome (and possibly KDE Plasma as well) to set a global DBus value depending on dark/light theme preference. Fyne v2.3.0 will start watching this setting (https://github.com/fyne-io/fyne/issues/2657) but we do not currently set it in Fynedesk.

    It believe it would be good if we could set it here to make sure that non Fyne apps (if the user has GTK+4+libadwaita apps or anything else that supports it) follow the preference.

    Is it possible to construct a solution with the existing API?

    I think so but it might be that we are using the fyne_settings application. In that case, it probably only makes sense to set the DBus preference when running inside Fynedesk. It should be up to the desktop environment to set it in my opinion.

    Describe the solution you'd like to see:

    Switching between light and dark mode sets the DBus setting that makes sure that all applications that support it automatically follow light and dark preferences.

  • What's the accessibility situation?

    What's the accessibility situation?

    Is your feature request related to a problem? Please describe:

    Is Fynedesk (and/or the underlying library) accessible? Does it work with screen readers? Does it have visual bell for the d/Deaf?

    Is it possible to construct a solution with the existing API?

    Describe the solution you'd like to see:

  • 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
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

Dec 3, 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.

Dec 3, 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

Dec 3, 2022
Create desktop apps using Go and Web Technologies.
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

Dec 29, 2022
Example Go desktop app using HTML

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

Jun 14, 2022
Build cross-platform modern desktop apps in Go + HTML5
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

Jan 6, 2023
gosx-notifier is a Go framework for sending desktop notifications to OSX 10.8 or higher
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

Dec 28, 2022
A Go (golang) Custom Flutter Engine Embedder for desktop
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

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

Dec 20, 2022
Ps4gdb desktop - PS4GDB consists of two components

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

Oct 4, 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

Jan 2, 2023
Flutter on Windows, MacOS and Linux - based on Flutter Embedding, Go and GLFW.
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

Jan 9, 2023
Linux port of tailscale system tray menu.
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

Jan 6, 2023
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

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

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

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

Jan 20, 2022
Idiomatic Golang GUI using Lorca
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.

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

Jan 5, 2022
A Fyne login manager for linux desktop computers
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.

Oct 12, 2022
Calculator-with-Fyne - A Fyne calculator with a GUI
Calculator-with-Fyne - A Fyne calculator with a GUI

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

Apr 26, 2022