Hardware/Razer: Difference between revisions

m fixed some syntax error
Revert code blocks to syntax highlighting
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Hardware/breadcrumb}}
{{Hardware/breadcrumb}}
<h2>OpenRazer</h2>
 
OpenRazer is an open-source project to support Razer peripherals, including those found in their laptops. To enable the OpenRazer you need to add the following to your <code>configuration.nix</code>
== OpenRazer ==
 
OpenRazer is an open-source project to support Razer peripherals, including those found in their laptops. To enable the OpenRazer you need to add the following to your system configuration:


<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
   hardware.openrazer.enable = true;
   hardware.openrazer.enable = true;
   environment.systemPackages = with pkgs; [
   environment.systemPackages = with pkgs; [
      openrazer-daemon
    openrazer-daemon
  ];
  ];
</syntaxHighlight>
</syntaxHighlight>


To run the <code>openrazer-daemon</code>, you need to be in the <code>openrazer</code> group.
To run the <code>openrazer-daemon</code>, you need to be in the <code>openrazer</code> group.
<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
users.users.<username> = { extraGroups = [ "openrazer" ]; };
users.users.<username>.extraGroups = [ "openrazer" ];
</syntaxHighlight>
</syntaxHighlight>


To enable a front-end to control the peripherals, add the following to your configuration
To enable a front-end to control the peripherals, add the following to your system configuration:
 
<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
   environment.systemPackages = with pkgs; [
   environment.systemPackages = with pkgs; [
      polychromatic
    polychromatic
   ];
   ];
</syntaxHighlight>
</syntaxHighlight>


<h2>Razer Blade 15 Advanced (Early 2020 model)</h2>
== Razer Blade 15 Advanced (Early 2020 model) ==


<h3>Lid reopen hybernate issue</h3>
=== Lid reopen hybernate issue ===


Upon closing the lid to the laptop and reopening, an issue occurs where the device will intermittently go back into hybernate mode after around 10-30 seconds. Setting the kernel parameter <code>button.lid_init_state=open</code> fixes this issue. The following is an example configuration (working in NixOS 22.05):
Upon closing the lid to the laptop and reopening, an issue occurs where the device will intermittently go back into hybernate mode after around 10-30 seconds. Setting the kernel parameter <code>button.lid_init_state=open</code> fixes this issue. The following is an example configuration (working in NixOS 22.05):


<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
  boot.kernelParams = [ "button.lid_init_state=open" ];
boot.kernelParams = [ "button.lid_init_state=open" ];
</syntaxHighlight>
</syntaxHighlight>


<h3>Getting the Nvidia card to work properly with external displays</h3>
=== Getting the Nvidia card to work properly with external displays ===


In order to get both the laptop display and external displays working, in the BIOS settings set Chipset > GPU MODE to "Dedicated GPU only".
In order to get both the laptop display and external displays working, in the BIOS settings set Chipset > GPU MODE to "Dedicated GPU only".


After setting the GPU MODE to "Dedicated GPU only" in the BIOS, enabling [[Nvidia#sync_mode sync mode| Nvidia]] is necessary in order for both the laptop's display and external display/ports to work properly. Here is an example configuration snippet for NixOS 22.05:
After setting the GPU MODE to "Dedicated GPU only" in the BIOS, enabling [[NVIDIA#Sync mode]] is necessary in order for both the laptop's display and external display/ports to work properly. Here is an example configuration snippet for NixOS 22.05:


<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
   services.xserver = {
   services.xserver.videoDrivers = [ "nvidia" ];
    videoDrivers = [ "nvidia" ];
  };
   hardware.opengl.enable = true;
   hardware.opengl.enable = true;
  hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.beta;
 
 
   hardware.nvidia = {
   hardware.nvidia = {
    package = config.boot.kernelPackages.nvidiaPackages.beta;
     powerManagement.enable = true;
     powerManagement.enable = true;
     modesetting.enable = true;
     modesetting.enable = true;
Line 57: Line 59:




<h3>Additional Resources</h3>
=== Additional Resources ===


https://discourse.nixos.org/t/razer-blade-15-nvidia-integrated-graphics-on-nixos-issues/23576/6
https://discourse.nixos.org/t/razer-blade-15-nvidia-integrated-graphics-on-nixos-issues/23576/6
Line 66: Line 68:




<h2>Updating your system to use the unstable drivers and daemon</h2>
== Updating your system to use the unstable drivers and daemon ==
If you are using a new model from razer it probably is not available in the stable packages.
If you are using a new model from Razer, it probably is not available in the stable packages.
But it might be available in the unstable ones.
But it might be available in the unstable ones.


In your configuration.nix file:
Add the below to your system configuration:
<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
nixpkgs.config = {
  nixpkgs.config = {
     allowUnfree = true;
     allowUnfree = true;


     packageOverrides = pkgs: {
     packageOverrides = pkgs: {
       stable = import <nixos-stable> {config = config.nixpkgs.config;};
       stable = import <nixos-stable> { config = config.nixpkgs.config; };
       unstable = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz") { config = config.nixpkgs.config; };
       unstable = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz") { config = config.nixpkgs.config; };
     };
     };
   };
   };


# updates the whole kernel to unstable so you have the correct drivers.
  # updates the whole kernel to unstable so you have the correct drivers.
boot.kernelPackages = pkgs.unstable.linuxPackages;
  boot.kernelPackages = pkgs.unstable.linuxPackages;


# overrides the openrazer-daemon that the harware.openrazer.enable starts
  # overrides the openrazer-daemon that the harware.openrazer.enable starts
   nixpkgs.overlays = [
   nixpkgs.overlays = [
     (final: prev: {
     (final: prev: {
Line 93: Line 95:
   environment.systemPackages = with pkgs; [
   environment.systemPackages = with pkgs; [
     unstable.polychromatic
     unstable.polychromatic
# alternatively
  # alternatively
#   unstable.razergenie
  # unstable.razergenie
   ];
   ];
</syntaxHighlight>
</syntaxHighlight>


== USB disable Issues ==
== USB disable Issues ==
If you are encountering issues that your Razer keyboard does light up on boot shortly and then can not be found by the open-razer-daemon until you unplug your USB cable and re-plug it. Then you might want to reset your USB on startup so that after login the daemon finds it again.<syntaxhighlight lang="nixos" line="1">
If you are encountering issues that your Razer keyboard does light up on boot shortly and then can not be found by the open-razer-daemon until you unplug your USB cable and re-plug it. Then you might want to reset your USB on startup so that after login the daemon finds it again.
  # Razer usb reset. Since it disables somehow on boot.
  systemd.services."usb-reset" = {
    description = "Resets usb port for my Razer Keyboard";
    after = ["multi-user.target"];
    serviceConfig = {
        User = "root";
        Type = "simple";
        ExecStart=pkgs.writeShellScript "unit-restart-usb7_3" ''
          echo '7-3' |tee /sys/bus/usb/drivers/usb/unbind
          echo '7-3' |tee /sys/bus/usb/drivers/usb/bind
        '';
        KillMode = "process";
        Restart = "on-failure";
    };
    wantedBy = ["graphical.target"];
  };


  systemd.services."usb-reset".enable = true;
<syntaxHighlight lang=nix>
</syntaxhighlight>7-3 is the Bus: 7 and the Port: 3
# Razer usb reset. Since it disables somehow on boot.
systemd.services."usb-reset" = {
  enable = true;


How to figure those out you can read here:
  description = "Resets usb port for my Razer Keyboard";
  after = ["multi-user.target"];
  serviceConfig = {
      User = "root";
      Type = "simple";
      ExecStart=pkgs.writeShellScript "unit-restart-usb7_3" ''
        echo '7-3' |tee /sys/bus/usb/drivers/usb/unbind
        echo '7-3' |tee /sys/bus/usb/drivers/usb/bind
      '';
      KillMode = "process";
      Restart = "on-failure";
  };
  wantedBy = [ "graphical.target" ];
};
</syntaxHighlight>


https://superuser.com/questions/1707773/how-to-turn-usb-connected-device-on-and-off-in-linux
The text <code>7-3</code> is composed of the bus number (7) and the port (device?) number (3).


If that does not work, you can reset all usb controllers instead:
To find the bus and port numbers, read this post: [https://superuser.com/questions/1707773/how-to-turn-usb-connected-device-on-and-off-in-linux]


https://unix.stackexchange.com/questions/704341/how-to-reset-usb-controllers<syntaxhighlight lang="nixos" line="1">
If that does not work, you can reset all USB controllers instead <ref>https://unix.stackexchange.com/questions/704341/how-to-reset-usb-controllers</ref>:


<syntaxHighlight lang=nix>
   # Razer usb reset. Since it disables somehow on boot.
   # Razer usb reset. Since it disables somehow on boot.
   systemd.services."usb-reset" = {
   systemd.services."usb-reset" = {
    enable = true;
     description = "Resets usb port for my Razer Keyboard";
     description = "Resets usb port for my Razer Keyboard";
     after = ["multi-user.target"];
     after = ["multi-user.target"];
Line 135: Line 141:
         User = "root";
         User = "root";
         Type = "simple";
         Type = "simple";
         ExecStart=pkgs.writeShellScript "unit-restart-usb-controller" ''
         ExecStart = pkgs.writeShellScript "unit-restart-usb-controller" ''
           #!/usr/bin/env bash
           #!/usr/bin/env bash
           # Resets all USB host controllers of the system.
           # Resets all USB host controllers of the system.
Line 168: Line 174:
         Restart = "on-failure";
         Restart = "on-failure";
     };
     };
     wantedBy = ["graphical.target"];
     wantedBy = [ "graphical.target" ];
   };
   };
</syntaxHighlight>
== References ==
<references />


  systemd.services."usb-reset".enable = true;
[[Category:Hardware]]
</syntaxhighlight>