Skip to content

Commit

Permalink
Ensure that nvidia graphics driver is mounted
Browse files Browse the repository at this point in the history
Checks that /sys/module/nvidia/version has corresponding
/usr/lib/GL/nvidia-X-Y directory.

Issue: #342

Signed-off-by: Jiří Janoušek <[email protected]>
  • Loading branch information
jiri-janousek committed Jun 4, 2017
1 parent 8c5253c commit 0deb2a9
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/nuvolakit-runner/AppRunnerController.vala
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,9 @@ public class AppRunnerController : RunnerApplication

private void init_gui()
{
#if FLATPAK
Graphics.ensure_gl_extension_mounted(main_window);
#endif
actions_helper = new ActionsHelper(actions, config);
unowned ActionsHelper ah = actions_helper;
Diorite.Action[] actions_spec = {
Expand Down
4 changes: 4 additions & 0 deletions src/nuvolakit-runner/MasterController.vala
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,10 @@ public class MasterController : Diorite.Application
if (init_state >= InitState.GUI)
return;

#if FLATPAK
Graphics.ensure_gl_extension_mounted(main_window);
#endif

Diorite.Action[] actions_spec = {
// Action(group, scope, name, label?, mnemo_label?, icon?, keybinding?, callback?)
new Diorite.SimpleAction("main", "app", Actions.HELP, "Help", "_Help", null, "F1", do_help),
Expand Down
72 changes: 72 additions & 0 deletions src/nuvolakit-runner/system/Graphics.vala
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
/*
* Copyright 2017 Jiří Janoušek <[email protected]>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

namespace Nuvola.Graphics
{

#if FLATPAK
public string? get_required_gl_extension()
{
try
{
var nvidia_version = Diorite.System.read_file(File.new_for_path("/sys/module/nvidia/version")).strip();
if (nvidia_version != "")
return "nvidia-" + nvidia_version.replace(".", "-");
}
catch (GLib.Error e)
{
if (!(e is GLib.IOError.NOT_FOUND))
error("Unexpected error: %s", e.message);
}
return null;
}

public bool is_required_gl_extension_mounted()
{
var gl_extension = get_required_gl_extension();
if (gl_extension == null)
return true;
else
return File.new_for_path("/usr/lib/GL").get_child(gl_extension).query_exists();
}

public void ensure_gl_extension_mounted(Gtk.Window? parent_window)
{
if (!is_required_gl_extension_mounted())
{
var gl_extension = get_required_gl_extension();
var dialog = new Gtk.MessageDialog.with_markup(
parent_window, Gtk.DialogFlags.MODAL, Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE,
("<b><big>Missing Graphics Driver</big></b>\n\n"
+ "Graphics driver '%s' for Flatpak has not been found on your system. "
+ "Please consult <a href=\"https://github.com/tiliado/nuvolaruntime/wiki/Graphics-Drivers\">documentation "
+ "on graphics drivers</a> to get help with installation."), gl_extension);
Timeout.add_seconds(120, () => { dialog.destroy(); return false;});
dialog.run();
error("GL extension not found: %s", gl_extension);
}
}
#endif

} // namespace Nuvola.Graphics

0 comments on commit 0deb2a9

Please sign in to comment.