LXDE Blog

訂閱文章
已更新: 9 分鐘 9 秒前

Memory Usage of LXQt 0.9

四, 12/02/2015 - 02:54

Since the release of LXQt 0.9 several days ago, many people are curious about its memory usage since in the release announcement we mentioned the use of two libraries from KDE framework 5. Don’t worry! They are just “pure Qt libraries” without other KDE dependencies (Thank you KDE guys!). Good engineers always base their design desicions on careful analysis, experiments, and measurements, not politics. If a library works pretty well, it does not really matter where it comes from or it belongs to which camp. If it’s free software and it’s suitable for our need, I’d say “use it”. Here are some numbers of memory usage after cold boot.
Testing environment:

  • Debian testing (32 bit)
  • LXQt 0.9, Qt 5.3, and KF5 packages are taken from Siduction
  • Running in Virtualbox 4.3.20
  • RAM: 512 MB
  • CPU core: 1
  • Screen resolution: 1024×768
  • Measurement: Open xterm, and type `free -mh` (cache and buffer are excluded)

Memory usage after cold boot:

  • LXQt 0.9: 118 MiB
  • LXDE: 98 MiB
  • XFCE: 107 MiB
  • plain Openbox (without running any apps): 70 MiB

Well, for those who still remembered my previous report, the memory usage increased. But wait! All of the DEs, including Openbox, have the same degree of growth in memory usage. So it’s more possibly caused by the upgrade of the system itself. If you see the difference between plain openbox and LXQt, we only added 38 MiB (LXQt 0.8 added 37 MiB). Given that we migrated to Qt5 and added new features, both of which should normally increase memory usage, the current results are reasonable. Seriously, there are still room for more optimizations but we need some time to finish them.

LXQt aims to be a “modern” desktop with some “classic” designs which does not get in your way. We’re not going to clone KDE. Besides, don’t worry about resource usage. That’s the challange for developers and we’ll fight for it.

LXQt Performance Tips

三, 04/02/2015 - 06:11

As we’re going to have a new release for LXQt 0.9, I’d like to provide some performance tips for users and packagers.

  1. Consider compiling lxqt-panel and lxqt-runner with menu-cache  support whenever possible:
    Menu-cache is a mechanism to cache the generated freedesktop.org application menu so we don’t need to parse hundreds of files everytime. Though you can compile lxqt-panel and lxqt-runner without it and things still work, these two components will generally load faster if you use menu-cache.
  2. Compile libfm with libexif:
    Libfm if the core library of PCManFM file manager. When compiled with libexif support, it can extract the thumbnails created by the cameras which are often embedded in jpeg files. So we can avoid loading the photo and generate the thumbnail ourselves. With libexif, loading folders with many photos will be faster.
  3. Try to “prelink” your system:
    When you launch a program, your system will load it alone with the libraries it requires. Then, dynamic linking will be performed to make these libraries work together. The process could take seconds in some cases and affect the speed of program startup. By using “prelink”, part of the linking/relocation process can be done once and cached; then in the future the dynamic linking becomes faster. It’s tool worth trying if your desktop takes quite a long time to login.
  4. Avoid GTK+ theme:
    Qt developers did a great job and provided a “GTK+” style for theming the Qt programs so they can look like GTK+/Gnome programs when running in Gnome. The magic behind this is simple. Your Qt style engine loads GTK+  2 and creates fake Gtk UI elements. Then, copy the images painted by GTK+ to your Qt widgets. By using this, you have both Qt and GTK+ 2 theme engines loaded for every Qt program. Not really a big deal since the operations are still fast enough, but if you don’t need a GTK+ theme, don’t use it. Try “fusion” for Qt5 or “Cleanlook” for Qt 4.
  5. Some notes about gvfs:
    Removing gvfs won’t make your file manager faster. PCManFM-Qt does not use it for most of the local file operations. So it’s safe to keep it around since it does not slow down things.  We used “gvfs” from Gnome internally for trash can, volume management, and mounting various network filesystems. Yes, the UI is in Qt and its core uses few Gnome stuff. Don’t hate gvfs just because there’s a “g” in its name. It’s a quite good VFS implementation which does not have Gnome dependencies. So don’t remove it just because its name contains a “g”. It provides you some good features, including mounting sftp filesystems or accessing Android mtp devices if you have proper plugins installed.
    Generally speaking, it might be a good idea for packagers to add “gvfs” to the dependencies or package suggestion list of pcmanfm-qt.
  6. Avoid Qt 5.4.0 if possible:
    We encountered several weird regression bugs of Qt 5.4 while debugging LXQt. It breaks drag and drop crossing different programs. With Qt 5.4, you cannot drag a file from my file manager to other programs, but it’s not my fault.  
    (The bug will be fixed in Qt 5.4.1, which is not yet released.)

We’re going to release LXQt 0.9 very soon!
Hope these tips help. Cheers!

LXPanel 0.8.0 released.

日, 07/12/2014 - 14:27

As already was announced, the time to release next LXPanel has came. The release goals for 0.8 were:

  • complete multi-monitor support
  • improve and further simplify plugins API

It also happen to have better performance than before, that was a side effect of optimizations. The release 0.8.0 comes fully translated to 17 languages: Chinese (China), Dutch, Finnish, French, Galician, Ganda, German, Greek, Icelandic, Indonesian, Italian, Portuguese, Russian, Spanish, Swedish, Turkish, Ukrainian. As usual, a lot of bugs were fixed, and you are welcome to report any bugs you happen to find yet. Work on LXPanel features will be continued shortly, stay in touch, it will become yet more convenient later.
New release tarball download link:
lxpanel-0.8.0.tar.xz – SHA1: c0b2d9edfd0d95ee142db7cd0e55763a785daa0a

Changes since previous release 0.7.2 (see git log for details):

  • Added workaround for crash in gtk-run with old libmenu-cache.
  • Core functions are separated into a private library to allow reliable linking of modules using -Wl,-z,defs.
  • Added macro LXPANEL_CHECK_VERSION() for third party pluguns API check.
  • Added CONF_TYPE_EXTERNAL support for lxpanel_generic_config_dlg().
  • Implemented property “aspect-width” for PanelIconGrid to allow using non-square tray sockets.
  • Added support for monitors “All” to span panel over all monitors (i.e. to allow pre-0.6.0 behavior).
  • Implemented monitors hotplug support.
  • Fixed popups positioning in multi-monitor environment.
  • Fixed updating panel size if appropriate monitor changed its size or position.
  • Implemented disabling for “Reserve space” button if another monitor lies beyond the edge so reservation will cover it. Also reservation will not be applied in such cases even if set in config manually.
  • Some edge and monitors selections in panel configuration dialog may be insensitive now if appropriate edge and monitor combination is not available, to avoid panels stacking one over another.
  • Fixed bug with hidden panel disappearing after resolution change.
  • Add lxpanel_image_new_for_icon() API to replace another (obsolete) API _gtk_image_new_from_file_scaled().
  • Added API panel_config_hotkey_button_new() to use as CONF_TYPE_EXTERNAL widget to allow configure global hotkeys for plugins functions.
  • Added API lxpanel_apply_hotkey() as a convenient libkeybinder interface to use in modules that also use panel_config_hotkey_button_new(). Now LXPanel requires libkeybinder too.
  • Added API panel_config_click_button_new() to configure mouse gestures and panel_config_click_parse() to parse its output.
  • Added “icon-size-changed” signal to LXPanel which is emitted when icons size in configuration dialog was changed.
  • Improved lxpanel_image_new_for_icon() API to follow panel icons size changes, not only theme changes. This way calls on lxpanel_image_* APIs on theme or panel changes may be eliminated, i.e. code becomes simpler.
  • Added new lxpanel_image_change_icon() API for simplification reasons so other lxpanel_image_* APIs can be replaced completely.
  • APIs lxpanel_button_set_icon() lxpanel_button_update_icon() now don’t require setting icon size since created button already follows size from panel settings. Also it doesn’t require refresh after the panel configuration change.
  • Optionally scaling up small icons in the taskbar may be disabled: scaled up icons may look bad due to pixelization (patch from Anton Lobashev).
  • When adding new panel, now correctly edges of monitor where popup was are tried before any other monitors.
  • Correctly open ‘netstat’ plugin own menu on left-click since right-click should open panel context menu instead.
  • System critical temperature level in ‘thermal’ plugin now is properly ignored if manual levels are active.
  • Fixed click on ‘menu’ plugin, only image was clickable, not whole area.
  • Added API panel_config_int_button_new() for generic plugin config spin button with custom range, not just generic 0…1000.
  • Fixed wrong behavior with PanelIconGrid constrained width after child was removed: size wasn’t always renegotiated correctly.
  • Fixed range of space reservation in multi-monitor setup (reservation might cover another monitor).
  • Numeric-only string will be saved now double-quoted to distinguish it from number in config.
  • Implemented flashing on task with urgency in grouped task list menu.
  • Disabled flashing on urgency hint if window has focus, most of window managers do the same on window decorations.
  • Fixed border of ‘batt’ plugin, it should correctly use panel settings.
    Also Size setting on it doesn’t include border width anymore.
  • Allowed default alarmCommand on ‘batt’ plugin be translated.
  • Implemented sorting plugins in Add plugin window in alphabetic order.
  • Fixed font in the weather plugin to use panel settings.
  • Added new API lxpanel_button_compose() for future usage by plugins.
  • Added optional ‘volumealsa’ plugin volume mapping from alsamixer (patch from Peter).
  • Added new API lxpanel_button_set_label() to change label of button that was created using some lxpanel_button_*() API.
  • Added “panel-font-changed” signal to LXPanel to be able follow settings change in font configuration of panel using lxpanel_button_*() API.
  • Fixed nasty bug with autohidden panel after unhide appeared for short time somewhere at the screen.
  • Fixed calendar and configuration windows blinking on their appearance.
  • Fixed panel update when background image changed in configuration.
  • Changed to use persistent background image for panel and Cairo. This way updating background should be faster, and also fixed background of plugins when image is used, both placement and alpha color.
  • Urgent window is now always visible on the taskbar irrelevant of the desktop number on which it appears, because urgent window requires user attention (patch from Andy Balaam).
  • Moved bit of code that is used out from src/bg.c and discarded src/bg.c from code used.
  • Dropped setting members of Panel structure: workarea, wa_len, bg.
  • Replaced GtkComboBoxEntry in ‘netstatus’ plugin window with GtkComboBox.
  • Simplified plugins background setting – they should never use any own background but either use one from panel or from theme (depending on panel configuration). This should improve performance.
  • Don’t update a whole panel background anymore after some plugin was resized, only update the plugin itself to improve performance.

LXSession 0.5.2 released.

三, 03/12/2014 - 17:01

After next round of bugfixes next version of LXDE session manager finally came to the release time. We all hope it is more stable and bugless now.
New release tarball download link:
lxsession-0.5.2.tar.xz – SHA1: 00d45cccbdd6fb05c46998671a7c12123a0a2179

Changes since previous release 0.5.1 (see git log for details):

  • Corrected connect and emit signals for lxsession-db to fix hanging in some cases.
  • Fixed duplicate lxpolkit invocation.
  • Updated few translations.
  • Added some environment variables for LXQt and Qt support.
  • Fixed D-Bus string comparison in lxsession-logout.
  • Added ESCAPE key to close the lxsession-logout menu.
  • Created lock file to prevent more than one logout dialog.
  • Using libunique for lxpolkit and lxclipboard, to avoid launching it twice.
  • Fixed gtk3 compilation.
  • Few small corrections in the Makefile.

LXPanel 0.8.0 pre release testing.

二, 25/11/2014 - 11:46

After some development, it’s time to release next feature version of LXPanel. The release goals for 0.8 were:

  • complete multi-monitor support
  • improve and further simplify plugins API

Now that it was done, and numerous bugs fixed along with that, LXPanel has come to release time, which is scheduled in about 2 weeks. We would appreciate all the testing and feedback on it. The fresh sources are in GIT repository, as usual. The changelog since version 0.7.2 is big enough, you can find it in the sources or read online.

I also would like to ask all our translators to come into Pootle and translate it. I would ask to read the Wiki if you didn’t do that lately. Thank you in advance, everyone.

In memory of Razor-qt

五, 21/11/2014 - 14:13

Although people often compare LXDE and the “so-called” Qt port, LXQt with each other, they are actually from different code bases.
The most parts of LXQt are actually built on top of razor-qt, a lightweight Qt-based DE with the same philosophy as LXDE. We reorganized the source code of razor-qt and removed unused pieces. Then we ported several LXDE components to Qt and also developed some new ones. Hence it’s more the merge of developers than the merge of the actual source code. That’s why they have slightly different feature sets. Without the work of razor-qt project, we can’t have LXQt now.  Its developers deserved the credit. Since the story is too long for the tiny “About” dialog, I wrote the blog post here to thank their contributions.
Long live free software!

Status update for “LXDE”

二, 18/11/2014 - 04:44

Yes, it’s about the gtk+ version LXDE, not LXQt.
Previously, razor-qt and lxde project merged and formed LXQt project, which just had a 0.8 release. Though the original plan was to migrate to Qt, this does not mean that LXDE is dropped. As many of the users have noted, many LXDE gtk+ components got updates recently. LXDE is still actively developed and maintained by the developers lead by Andrej N. Gritsenko (LStranger) and as long as gtk+ 2 is in use, I believe that they’ll keep working on it. We even got some patches for gtk+ 3 recently. Yes, gtk+ 3. This does not mean that LXDE is going to use gkt+ 3, but it’s a clear indicator that LXDE is not dead. If you’re not a fan of LXQt, don’t worry, you can still use LXDE. Also I want to say “thank you” again to LStranger who work really hard to keep LXDE so others can have some time to focus on LXQt while keeping our promise to the users.
About LXQt, the 0.8 version is quite stable and we have the required features, but of course it’s not good enough and have room for improvement. We’ll keep working on that, too. For the part I’m responsible for, the file manager, I’ll try to add the features that exist in the gtk+ versions but abscent in the Qt port. Also, I’m going to do more bechmarks for LXQt recently. Other developers are working on code cleanup and removing dependency on X11 so we can move to Wayland later.Both LXQt and LXDE are actively developed. Stay tunned!

LXDE-Common 0.99.0 released.

五, 24/10/2014 - 09:53

A key package with LXDE in the name (and reasonably associated with LXDE as a whole) got a bit of updates. Also its version number was noticeably changed, as a sign that LXDE version should be 1.0 next time. When that would happen? Let us don’t tell you yet.
New release tarball download link:
lxde-common-0.99.0.tar.xz – SHA1: 8ae027a26043620990a5c5d96a31e46b0ff669da

Changes since previous release 0.5.6 (see git log for details):

  • Fixed missing install of lxde-logout.desktop file.
  • Removed inappropriate text about lxde-settings from README.
  • Fixed sort_by in the pcmanfm.conf, it should be 2, not 0.
  • Added exporting XDG_CURRENT_DESKTOP in startlxde script.
  • Disabled copying pcmanfm config file. The recent pcmanfm releases support profile selection on its own, so this code is no longer needed.
  • Fixed lxpanel profile location.
  • Added launching LXRandR when Fn+Screen (XF86Display key) is pressed.
  • Correctly implemented translations for *.desktop files using intltool, now those can be properly translated.
  • Added lxde-screenlock.desktop file to call lxlock (taken from Debian, with translations too).
  • Few new translations added, some were updated.
  • Removed obsolete key Encoding from *.desktop files.

LXPanel 0.7.2 released.

五, 24/10/2014 - 09:34

Another month has gone and next bugs fixing release of this major component happened. Few annoying bugs were fixed and we really hope it is better than before. Very possible it is last release in 0.7 line since there are a lot of improvements coming, and there is no room for any improvements in 0.7, you should wait 0.8.0 for new features.
New release tarball download link:
lxpanel-0.7.2.tar.xz – SHA1: 956851d4d465b2443c1253ceb0399386fd15bb82

Changes since previous release 0.7.1 (see git log for details):

  • Fixed unhiding panel if it becomes empty and height_when_hidden is 0.
  • Fixed invalid X protocol word size: despite of stating it 32 bit, the X server uses unsigned long which is 64 bit on 64-bit architectures.
  • Adapted to use libmenu-cache >= 1.0.0 – it could show empty folders in the desktop menu.
  • Fixed crash in taskbar after visible task changed name then gone.
  • Ensured panel background update after some plugin was resized.
  • FileManager statement from old config should never be scanned again.
  • Fixed positioning of new created panel, the edge was not saved.
  • Eliminated hardcoded “xterm” in ‘volumealsa’ plugin – LibFM has enough means to call terminal when needed.
  • Fixed crash if ‘volumealsa’ plugin initialization failed.

LXAppearance 0.6.1 released.

五, 24/10/2014 - 09:13

Just in few days after release 0.6.0 we decided to release very small update, just to get functionality of 0.6.0 be complete.
New release tarball download link:
lxappearance-0.6.1.tar.xz – SHA1: b55485e14b5ef75403de917283258f1e6b0f06e7

Changes since release 0.6.0:

[b5134e4] Always save gtkrc files, even with lxsession running.

Menu-cache stable release.

五, 24/10/2014 - 09:05

That happened again! One more 1.0.0 version, which means package grew enough and became mature, featureful, and bugless. First one was LibFM/PCManFM, not it’s time for another library, menu-cache. Almost month after release candidate, some bug found, and now we hope it is really good for everyone.
A release tarball download link:
menu-cache-1.0.0.tar.xz – SHA1: e7b3854109f9826472cf9795e924acebe5e27861

Changes since release candidate (see git log for details):

  • Fixed bug when cache was not updated while it should: check if the last modification time for directory is more recent than modification time for cache may not always be valid – some .desktop entry might be just changed by update and that will lead to falsed cache contents.
  • Added Log Domain “Menu-Cache” for better library logging messages.