New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GSoC 2018: migrate Epoptes to Python3/Gtk3 #63

Merged
merged 118 commits into from Aug 13, 2018

Conversation

Projects
None yet
3 participants
@alkisg
Contributor

alkisg commented Aug 11, 2018

PR description and GSoC project goals

This is a pull request for merging the final work of the Epoptes Google Summer of Code 2018 project, developed by Alkis Georgopoulos under the mentorship of Fotis Tsamis and the supervision of GFOSS - Open Technologies Alliance. Many thanks to everyone involved for this opportunity to radically improve Epoptes!

It's directly mergeable with the upstream Epoptes master branch, and it contains the following features, which were also the project goals:

  • Migrate Epoptes from Python2 to Python3.
  • Migrate Epoptes from Gtk2 to Gtk3.
  • Restructure and optimize the code, while resolving a lot of outstanding issues.
  • Apply PEP 8, PEP 257, PEP 3101, DEP-5, Sphinx and SPDX guidelines to the code base.
  • Ensure that Epoptes runs properly in recent systemd-based distributions like Ubuntu 18.04 and Debian Buster.

Abstract

Epoptes (Επόπτης - a Greek word for overseer) is an open source computer lab management and monitoring tool. It allows for screen broadcasting and monitoring, remote command execution, message sending, imposing restrictions like screen locking or sound muting the clients and much more! It can be installed in Ubuntu, Debian and openSUSE based labs that may contain any combination of the following: LTSP servers, thin and fat clients, non LTSP servers, standalone workstations, NX or XDMCP clients etc.

Epoptes has been undermaintained for the last couple of years. It's currently powered by Python 2 and GTK 2, while unfortunately a number of bugs have crept in due to major updates in Linux distribution packages (systemd, consolekit, VNC…).

Deliverables

The working repository was in github.The resulting code is of course included in this pull request, except for the code in my packaging pull request. All of the initial project goals were met and some even exceeded. The resulting timeline is recorded in the development diary below.

Future work

  • A VNC library should be used instead of relying on external programs like x11vnc and xvnc4viewer.
  • A console version of epoptes that could send commands to the clients would be very handy.
  • The network benchmark feature currently uses iperf2, which has a lot of issues. It should be rewritten with native python or twisted libraries, or at the very least it should use the newer iperf3 version.
  • The thumbshots feature is currently slow in thin clients. It should be done by the Xorg server locally if thin clients are to be supported by LTSP in the future.
  • A web interface for epoptes would be awesome, although rather difficult.

Development diary 🔗

Preliminary work

As part of my GSoC proposal, I submitted the following pull requests in github:

  • Convert lock-screen to Python 3 / GTK 3 (issue #45): migrating lock-screen to Python 3 / GTK 3 was rather straightforward. I took the opportunity to also add support for HiDPI monitors, giving appropriate sizes for the lock screen icon and text, and to make it work in the absence of a window manager (issue #47), for example in client login screens.
  • Convert screenshot to Python3/Gtk3 (issue #46): migrating screenshot to Python 3 / GTK 3 was a bit more challenging. Quite a bit of searching was required to map the old API into the new one, and I also bumped into issues with text encodings on stdout on Python 3, and even internal issues with the padding of the pixmap last line. I made sure the result works fine with the current Epoptes version, and I also did some benchmarking research.

April 23 - May 14: Community Bonding

April 23 - April 29:

April 30 - May 6:

May 7 - May 13:

May 14, 2018 - June 15, 2018: Students Work on their Projects

May 14 - May 20:

May 21 - May 27:

  • Migrate epoptes to Gtk3:
    • Pull request: Migrate Epoptes to Gtk3.
    • Replace all deprecated widgets (fortunately glade pinpoints them): GtkHBox, GtkVBox => GtkBox, GtkHButtonBox, GtkVButtonBox => GtkButtonBox, GtkAlignment => GtkGrid etc.
    • Use PYTHONWARNINGS=all to discover and replace deprecated code.
    • Pass a parent in set_transient_for() in all dialogs.
    • Read about GTK Inspector, to troubleshoot visual issues.

May 28 - June 3:

June 4 - June 10:

  • Restructure epoptes-client:

June 11 - June 17:

  • June 11 - June 15: first evaluations.
  • Restructure and optimize the following epoptes files:
    • ltsconf.py, xdg_dirs.py, wol.py, common/init.py.

June 18 - June 24:

  • Restructure and optimize the following epoptes files:
    • about.py, send_message.ui, send_message.py, exec_command.py, exec_command.ui, client_information.py, client_information.ui.

June 25 - July 1:

  • Restructure and optimize the following epoptes files:
    • notifications.py, logger.py, spawn_process.py, benchmark.ui.

July 2 - July 8:

  • Restructure and optimize the following epoptes files:
    • benchmark.py, bashplex.py, commands.py, exchange.py.
  • File and resolve issue #58: kill old benchmarks on start and avoid blocking.

July 9 - July 15:

  • July 9 - July 13: second evaluations.
  • Restructure and optimize the following epoptes files:
    • guiplex.py, uiconnection.py, epoptesd.py, constants.py, bin/epoptes.

July 16 - July 22:

  • Relaunch epoptes using sg when appropriate.
  • Avoid hang on gui<=>epoptes connection errors.
  • Allow client versions with hyphens.
  • Fix launchpad builds and various other issues.

July 23 - July 29:

  • Support launching from systemd->network-online.
  • gui.py: sanitize imports, line length, indentation, spacing, menus File, Labels.
  • Use Gtk.MessageDialog for common dialogs instead of glade.

July 30 - August 5:

  • gui.py: menus Clients, Help, toolbar, image names.
  • gui.py: lower_case functions, some static functions.
  • epoptes.ui: use proper names for all widgets.

August 6 - August 12:

  • Restructure and optimize the following epoptes files:
    • config.py, structs.py, setup.py, lib_users.py.
  • gui.py: improve thumbshot resizing, drag and drop, pylint warnings, use logger.
  • Switch shebang to #!/usr/bin/python3 to match dh_python3.

August 13 - August 19:

  • Implement systemd units, final testing, bug squashing, and uploading.
  • Update debian packaging.
  • Create launchpad import and recipe for PPA builds.
  • August 6 - August 14: students submit code and evaluations.
  • August 14 - August 21: mentors submit final evaluations.
  • August 22: results announced.

alkisg and others added some commits May 9, 2018

Merge pull request #3 from eellak/message
message: migrate to Gtk3
Merge pull request #4 from eellak/remote-assistance
remote-assistance: migrate to Gtk3
Merge pull request #5 from eellak/screenshot
screenshot: migrate to Gtk3
Merge pull request #6 from eellak/lock-screen
lock-screen: migrate to Gtk3
@alkisg

This comment has been minimized.

Contributor

alkisg commented Aug 11, 2018

GSoC doesn't provide a link for the initial proposal, so I'm attaching it here.

6628376224202752_1521993148_GSoC_Epoptes_Proposal.pdf

alkisg added some commits Aug 12, 2018

Revert "Update README.md".
This reverts commit e7825c4.
@ftsamis

Great work! Thank you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment