Giter VIP home page Giter VIP logo

shell's Introduction

Shell

License GitHub release GitHub issues CI

Responsive shell for the Liri desktop.

Desktop

Dependencies

Compiler requirements:

Qt >= 6.6.0 with at least the following modules is required:

The following modules and their dependencies are required:

Installation

mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/path/to/prefix ..
make
make install # use sudo if necessary

Replace /path/to/prefix to your installation prefix. Default is /usr/local.

You can also append the following options to the cmake command:

  • -DFEATURE_liri_development_build:BOOL=ON: Enable feature for development such as the ability to load arbitrary QML files.
  • -DFEATURE_enable_systemd:BOOL=OFF: Disable systemd support.
  • -DFEATURE_shell_enable_qtquick_compiler:BOOL=ON: Build with QtQuick compiler.
  • -DINSTALL_SYSTEMDUSERUNITDIR=/path/to/systemd/user: Path to install systemd user units (default: /usr/local/lib/systemd/user).

Licensing

Licensed under the terms of the GNU General Public License version 3 or, at your option, any later version.

Notes

Logging categories

Qt 5.2 introduced logging categories and Liri Shell takes advantage of them to make debugging easier.

Please refer to the Qt documentation to learn how to enable them.

Available categories

  • Compositor:

    • liri.compositor: Compositor
    • liri.screensaver: Lock, idle and inhibit interface
    • liri.session: Manages the session
    • liri.loginmanager: login manager subsystem
    • liri.loginmanager.logind: login manager subsystem (logind backend)
    • liri.shell: Shell
    • liri.gtkshell: Gtk shell support
    • liri.outputmanagement: Output management
    • liri.decoration: Window decorations
    • liri.shell.liricolorpickerv1: LiriColorPickerV1 Wayland protocol
    • liri.shell.lirilockscreenv1: LiriLockScreenV1 Wayland protocol
    • liri.shell.lirimodalv1: LiriModalV1 Wayland protocol
    • liri.shell.lirishellv1: LiriShellV1 Wayland protocol
  • Launcher QML plugin:

    • liri.launcher: Launcher model and items
    • liri.launcher.appsmodel: Applications model
  • MPRIS2 QML plugin:

    • liri.mpris2: MPRIS2 engine
    • liri.mpris2.player: MPRIS2 player interface
  • PolicyKit QML plugin:

    • liri.policykit: PolicyKit agent

Fake screen configuration

You can simulate a fake screen configuration on X11 and Wayland.

Run:

liri-session -- -platform xcb --fake-screen screenconfig.json # replace xcb with wayland if you are running on Wayland

Here's the contents of screenconfig.json:

{
	"outputs": [{
		"name": "Screen 1",
		"description": "Virtual output 1",
		"primary": false,
		"scale": 1,
		"position": {
			"x": 0,
			"y": 0
		},
		"mode": {
			"size": {
				"width": 1024,
				"height": 768
			},
			"refreshRate": 60000
		},
		"physicalSize": {
			"width": 350,
			"height": 260
		}
	},
	{
		"name": "Screen 2",
		"description": "Virtual output 2",
		"primary": true,
		"scale": 1,
		"position": {
			"x": 1024,
			"y": 0
		},
		"mode": {
			"size": {
				"width": 1024,
				"height": 768
			},
			"refreshRate": 60000
		},
		"physicalSize": {
			"width": 350,
			"height": 260
		}
	}]
}

QML JavaScript debugger

Developers can debug Liri Shell with Qt Creator and the QML JavaScript debugger.

Set the debug port and run the shell:

liri-session -- -qmljsdebugger=port:3768

In the example above we are using the default port which is 3768. Now from Qt Creator click on Debug -> Start Debugging -> Attach to QML port and specify the 3768 port.

See the Qt Creator manual for more information.

shell's People

Contributors

aldrog avatar hareiikundev avatar ibelieve avatar liri-ci avatar lkundrak avatar plfiorini avatar prcups avatar schnitzeltony avatar tones111 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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

shell's Issues

Launcher first startup is slow

The first time you open the launcher everything slows down.
Probably it wasn't noticeable before because there were less items to show.
Maybe we can improve performance by making the model inherit from QQmlParserStatus and populate with a thread started by componenteComplete().

Remove the process launcher dbus service

The D-Bus service keeps track of runnings apps and close them on logout.
Being a service it could be used from C++ as well as from QML, but it should be made private otherwise any program can use which I don't think it is a good idea.

We could just make a QML component in the compositor process that way only the shell can use it.

QML errors

Apparently there are some errors left from the refactoring

file:///home/plfiorini/git/liri/shell/compositor/qml/launcher/LauncherMenu.qml:102: TypeError: Cannot read property 'length' of undefined
file:///home/plfiorini/git/liri/shell/compositor/qml/launcher/LauncherMenu.qml:102: TypeError: Cannot read property 'length' of undefined
file:///home/plfiorini/git/liri/shell/compositor/qml/launcher/LauncherMenu.qml:102: TypeError: Cannot read property 'length' of undefined
file:///home/plfiorini/git/liri/shell/compositor/qml/desktop/HotCorners.qml:43: ReferenceError: TopLeftHotSpot is not defined
liri.launcher: Launching "qdbusviewer" from "/usr/share/applications/qdbusviewer.desktop"
liri.launcher: Launched "/usr/share/applications/qdbusviewer.desktop" (Qt QDbusViewer) with pid 22953
Connecting to deprecated signal QDBusConnectionInterface::serviceOwnerChanged(QString,QString,QString)
Using Wayland-EGL
file:///home/plfiorini/git/liri/shell/compositor/qml/desktop/HotCorners.qml:43: ReferenceError: TopLeftHotSpot is not defined
file:///home/plfiorini/git/liri/shell/compositor/qml/desktop/WorkspacesView.qml:52: TypeError: Cannot read property 'overlays' of undefined

PolicyKit agent

Move the polkit agent UI here.
Benefits: one process less to start and manage, no more icon in the panel

Make the shell work again

Latest changes broke the shell:

  • Windows are not displayed anymore
  • Panel doesn't show icons
  • Drawer doesn't resize to contents
  • Shortcuts don't work anymore
  • Panel can't be moved anymore
  • Panel size cannot be changed anymore

What about using ubuntu-ui-toolkit as backend of material-style instead of QtQuickControl

Hi, I think the beneficial of using ubuntu-ui-toolkit as backend of qml-material is:

  1. Less Qt version dependency, UT support from Qt5.5 to Qt5.7, thus qml-material would works on more linux distribution, and we don't need to follow Qt version update(eg. we need to port QuickControl based components from Qt5.6 to Qt5.7)
  2. Cross platform and multi screen support as UT aims to mobile and desktop
  3. More powerfull components

Some applications have mismatched app IDs

  • Corebird:
    • Desktop file ID: org.baedert.corebird
    • App ID: corebird
  • GNOME Calendar:
    • Desktop file ID: org.gnome.Calendar
    • App ID: gnome-calendar

There are probably others, but these are the ones I've noticed so far. Not sure if this is something that can be fixed in GreenIsland or if we'll need to add mappings to find the correct desktop ID.

Folders in the app launcher

  • Apps could be drag-and-dropped into folders.
  • Folders could be named.
  • Apps/folders could be user-sorted via drag and drop or be sorted alphabetically (I'd prefer alphabetic sorting I think).

Crash after unpinning app from the launcher

Stacktrace:

#0  0x00007ffff2f6ba77 in ?? () from /usr/lib/libQt5Core.so.5
#1  0x00007ffff2f6c217 in QObject::disconnectImpl(QObject const*, void**, QObject const*, void**, QMetaObject const*) () from /usr/lib/libQt5Core.so.5
#2  0x00007ffff1e1906f in QQuickPopup::setParentItem(QQuickItem*) () from /usr/lib/libQt5QuickTemplates2.so.5
#3  0x00007ffff1e3281a in QQuickToolTipAttached::show(QString const&, int) () from /usr/lib/libQt5QuickTemplates2.so.5
#4  0x00007ffff1e41b14 in ?? () from /usr/lib/libQt5QuickTemplates2.so.5
#5  0x00007ffff1e4220b in QQuickToolTipAttached::qt_metacall(QMetaObject::Call, int, void**) () from /usr/lib/libQt5QuickTemplates2.so.5
#6  0x00007ffff6251832 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlContextData*, QFlags<QQmlPropertyPrivate::WriteFlag>) ()
   from /usr/lib/libQt5Qml.so.5
#7  0x00007ffff6253043 in QQmlPropertyPrivate::writeValueProperty(QObject*, QQmlPropertyData const&, QVariant const&, QQmlContextData*, QFlags<QQmlPropertyPrivate::WriteFlag>) ()
   from /usr/lib/libQt5Qml.so.5
#8  0x00007ffff62c079c in QQmlBinding::write(QQmlPropertyData const&, QV4::Value const&, bool, QFlags<QQmlPropertyPrivate::WriteFlag>) () from /usr/lib/libQt5Qml.so.5
#9  0x00007ffff62c18e5 in QQmlBinding::update(QFlags<QQmlPropertyPrivate::WriteFlag>) () from /usr/lib/libQt5Qml.so.5
#10 0x00007ffff62c222e in QQmlBinding::refresh() () from /usr/lib/libQt5Qml.so.5
#11 0x00007ffff6297044 in QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**) () from /usr/lib/libQt5Qml.so.5
#12 0x00007ffff624119c in QQmlData::signalEmitted(QAbstractDeclarativeData*, QObject*, int, void**) () from /usr/lib/libQt5Qml.so.5
#13 0x00007ffff2f69c0c in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/libQt5Core.so.5
#14 0x00007ffff6297044 in QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**) () from /usr/lib/libQt5Qml.so.5
#15 0x00007ffff624119c in QQmlData::signalEmitted(QAbstractDeclarativeData*, QObject*, int, void**) () from /usr/lib/libQt5Qml.so.5
#16 0x00007ffff2f69c0c in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/libQt5Core.so.5
#17 0x00007ffff6a20888 in QQuickMouseArea::setHovered(bool) () from /usr/lib/libQt5Quick.so.5
#18 0x00007ffff6a219db in QQuickMouseArea::hoverEnterEvent(QHoverEvent*) () from /usr/lib/libQt5Quick.so.5
#19 0x00007ffff699f068 in QQuickItem::event(QEvent*) () from /usr/lib/libQt5Quick.so.5
#20 0x00007ffff3e58e3c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#21 0x00007ffff3e605b1 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#22 0x00007ffff2f3dc80 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#23 0x00007ffff69b1b00 in QQuickWindow::sendEvent(QQuickItem*, QEvent*) () from /usr/lib/libQt5Quick.so.5
#24 0x00007ffff69b44f6 in QQuickWindowPrivate::sendHoverEvent(QEvent::Type, QQuickItem*, QPointF const&, QPointF const&, QFlags<Qt::KeyboardModifier>, bool) ()

Automatically refresh applications list

Every time one of the following directories is changed (that is a file is added, modified or deleted) the list needs to be changed: ~/.local/share/applications, /usr/share/applications, /usr/local/share/applications - those are the XDG_DATA_DIRS that we can find with QStandardPaths

Show if an app is running in the launcher popup

Clicking on a running app should focus it instead of launching it. We already have the Application class used by the LauncherModel, so we can come up with some method that shares application instances between the launcher panel and popup.

Spread

Papyros has an interesting spread view, I'd like to replace/merge the current Hawaii implementation with that one.

Exit dialogs are confuzing

After testing the shell I noticed that when user tries to leave the shell, it says "Your computer will shutdown/logout/something else in N seconds.". That is completley fine. However, the OK button lets user think that after clicking it, he will be able to continue to work for the remaining amount of time. That is just my opinion, but I think it would be better to change OK buttons to " shutdown/logout/something else NOW".

Visual indication of apps starting

Papyros would bounce icons in the panel while they were starting. Would be nice to do this for apps pinned to the panel and for apps launched from the launcher.

Error when QtVirtualKeyboard is not enabled

file:///home/plfiorini/git/qmlos/shell/shell/base/Keyboard.qml:25:1: module "QtQuick.VirtualKeyboard" is not installed

Make sure keyboard is really loaded when the IM module is set to qtvirtualkeyboard

App launcher keyboard navigation

Right now it doesn't allow keyboard navigation.
An ideal workflow would be: Meta+Space opens the launcher, type in the app name, arrows to move in the results

Volume keys don't work

Looks like there's code in the sound indicator that's supposed to handle this, but it doesn't seem to be working.

Hot spot error

file:///home/plfiorini/git/qmlos/shell/shell/desktop/HotCorners.qml:40:5: QML Connections: Cannot assign to non-existent property "onHotSpotTriggered"

Unified boot process

Currently we have a different login screen and lock screen but they must be identical in order to look coherent.
The whole boot process in Hawaii had the idea of transitions, here's an early prototype: https://www.youtube.com/watch?v=A-NbOK4ZDl8
It got refined but as far as the transition goes it's still the same.

The boot process goes like this:

  1. Plymouth theme with greyish background and macOS like spinner
  2. SDDM fades in with the same background
  3. A QML transition kicks in and the greyish background is pulled up revealing the login prompt like a slideshow
  4. When the user authenticates a still of the desktop or the user wallpaper is shown with the same slideshow effect
  5. SDDM fades to the splash screen

The lock screen should look exactly like SDDM

Frequent apps page in the launcher

This would be similar to the Frequent tab in the GNOME launcher and would show apps that user has used frequently/recently. Useful for users with a lot of apps installed.

Relicense everything to GPL3

GPL3 is better because it avoids Tivoization.
We also want to deal with a single license so all files under the LGPL terms should be upgraded to GPL as well.

Save window geometry

Wayland windows are placed randomly, what if we saved window geometry per appId when the app is closed?

This is just an idea, I don't know if we can have a unique window id to make the algorithm find the windows when the placement is restored.

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.