Giter Club home page Giter Club logo

rnd-ash / razer-laptop-control Goto Github PK

View Code? Open in Web Editor NEW
346.0 14.0 29.0 3.33 MB

Project to create driver/software to control performance of razer laptops

License: GNU General Public License v2.0

Shell 0.70% C 40.61% Makefile 1.61% Rust 57.08%
razer-laptops fan-rpm driver gaming-mode linux kernel kernel-module openrazer rgb fan-speed leds razer-synapse rust razer-laptop-control rgb-control fan-control razer-control-gui razer-notebooks gtk

razer-laptop-control's Introduction

Razer laptop control project

A standalone driver + application designed for Razer notebooks

NOTICE

This repo is now archived as I have moved over to System76 after my trusty blade 15 died!

The work continues however, do check phush0's repository where he is adding more features and continuing support!

Join the unofficial Razer linux Channel

I can be contacted on this discord server under the 'laptop-control' channel Discord link

Project demo videos:

Playlist of all demos can be viewed here

Install

Arch linux

Use the 2 PKGBUILDS located here:

Other distros

Unfortunatly, you have to build from scrath.

What does this control

On all razer notebooks, the following is supported:

  • RGB keyboard control (Experimental)
  • Fan control
  • Power control

RGB control

Currently, there are various build in effects to choose from, and multiple 'effect layers' can be stacked on top of eachother, allowing for each key to be controlled with its own effect!

Fan control

Control the notebooks fan RPM just like in Synapse! - Currently supports switching between Automatic and manual (Up to 5300 RPM)

Power control

Control the power target of the notebook just like in Synapse!

  • Balanced - Standard 35W CPU TDP
  • Gaming - 55W CPU TDP - Allows for higher and more sustained CPU boost clocks (Additionally fan RPMs are increased)
  • Creator (Select notebooks only!) - Allows for higher GPU TDP

Repo contents

Driver

Kernel module required for the software to work

razer_control_gui

Experimental code for system daemon and UI/CLI interface for controlling both RGB aspects and fan+Power subsystem of razer notebooks

Changelog

1.3.0 - 04/01/2021

  • Add support for Razer book 2020
  • Add support for Razer blade pro 2020 FHD

1.2.1 - 17/07/2020

  • Added initial rust based Daemon - see razer_control_gui for more details
  • Removed useless printk calls in kernel module - DMESG output should not longer be cluttered

1.1.0 - 08/07/2020

  • Re-wrote the kernel driver (Made my life easier for the future)
  • Added native ledfs backlight control (You should now be able to control the keyboard backlight via gnome/KDE Desktop)

1.0.0

  • Initial release

razer-laptop-control's People

Contributors

baiyah7o avatar calcprogrammer1 avatar gregkh avatar jarbus avatar joffrey-louveton avatar juliusherrmann avatar mbocevski avatar mtib avatar phelps-sg avatar phush0 avatar rnd-ash avatar sadguitarius avatar shizzuru avatar tanzmusik avatar yvesh 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

razer-laptop-control's Issues

[BUG] Keyboard backlit switching off when loading the driver

Describe the bug
When driver loads keyboard backlit switched off.

To Reproduce
Load the driver.

Expected behavior
Honestly don't know, may be adjusting kdb brightness level, not switching it off.

Optional but useful, packet capture from synapse

I'm no kernel driver developer, so if you can tell me, what should I do, to provide any helpfull information, I'll try my best.
For now, to use driver with kbd backlit turned on I made this silly change to it:

diff --git a/driver/src/razer_common.c b/driver/src/razer_common.c
index d4561b5..b962cc2 100644
--- a/driver/src/razer_common.c
+++ b/driver/src/razer_common.c
@@ -163,7 +163,7 @@ static DEVICE_ATTR_WO(key_colour_map);
 static DEVICE_ATTR_RO(product);
 
 static int backlight_sysfs_set(struct led_classdev *led_cdev, enum led_brightness brightness) {
-    return sendBrightness(laptop.usb_dev, (__u8) brightness);
+    return 0;//sendBrightness(laptop.usb_dev, (__u8) brightness);
 }
 
 static enum led_brightness backlight_sysfs_get(struct led_classdev *ledclass) {

Maximum fan speed

Blade 15' adv - early '19 (i7 8750H; RTX2080) - BIOS 1.04 EC 1.02

echo 5300 > fan_rpm

(from auto!) fans will only go somewhat around 4600; executing the command again theyll ramp up to 5,3k (sometimes I've to execute the command twice)

Deleted Makefile

I saw your post on Reddit and wanted to test out the driver you created. It seems like you deleted your Makefile from the driver folder in one of your last commits.

[BUG] "Auto" fan speed not working on Blade 15 Base (2020)

Describe the bug
After setting the fans to a custom rpm (e.g. razer-cli write fan 4200), it is not possible to return to the "auto" setting.
The command razer-cli write fan 0 succeeds, but the fan speed stays the same (e.g. 4200 rpm)

To Reproduce

❯ razer-cli write fan 4200
RES: SetFanSpeed { result: true }
RES: GetFanSpeed { rpm: 4200 }
Current fan setting: 4200 RPM
❯ razer-cli write fan 0
RES: SetFanSpeed { result: true }
RES: GetFanSpeed { rpm: 0 }
Current fan setting: Auto (0)
❯ razer-cli read fan
RES: GetFanSpeed { rpm: 0 }
Current fan setting: Auto (0)

Expected behavior
Throttle down the fan (there is no load and temperature is low).

Optional but useful, packet capture from synapse
I cycled through several values in Synapse before setting back to auto.
Also, Synapse allows many different speeds even below the 3500 rpm limit adopted by razer-cli.

ChangeFanSpeed.pcapng.zip

I hope the packet capture is correct.

[BUG]Fan Control Does't Work on Late 2016 Blade 14" 1060

Describe the bug
A clear way of describing how the driver is misbehaving

The driver is not changing the fan speed when setting it with the rgb_test service.

To Reproduce
Steps to reproduce the behavior:

Install driver module on late 2016 Razer Blade 2016 with 1060gtx. Run sudo ./rgb_test --fan 4000 and the fan speed doesn't change. The rgb_test service does work to change the keyboard lightning colors.

Expected behavior
What should the driver do?
Set the fan speed to the speed specified in the --fan parameter.

Optional but useful, packet capture from synapse

If the driver is not doing as it should, it would be useful to provide a packet capture of you doing the same event in razer synapse. IE: increasing the fan RPM to 5000,

I would love to provide this, but I need a guide on how to capture this info.

[BUG] Various errors

Describe the bug

The daemon and application both fail on compilation. Had to remove the CMakeCache to get past one of the errors on both.

Output

[parker@stealth razer-laptop-control]$ cd daemon/
[parker@stealth daemon]$ ls
CMakeCache.txt  cmake_install.cmake  CPackConfig.cmake        CTestTestfile.cmake    install.sh  razercontrol-daemon          README.md
CMakeFiles      CMakeLists.txt       CPackSourceConfig.cmake  DartConfiguration.tcl  Makefile    razerlaptop-control.service  src
[parker@stealth daemon]$ mkdir build
[parker@stealth daemon]$ cd build
[parker@stealth build]$ cmake ..
CMake Error: The current CMakeCache.txt directory /home/parker/build/razer-laptop-control/daemon/CMakeCache.txt is different than the directory /home/ashcon/code/razer-laptop-control/daemon where CMakeCache.txt was created. This may result in binaries being created in the wrong place. If you are not sure, reedit the CMakeCache.txt
[parker@stealth build]$ rm ../C
CMakeCache.txt           CMakeFiles/              CMakeLists.txt           CPackConfig.cmake        CPackSourceConfig.cmake  CTestTestfile.cmake
[parker@stealth build]$ rm ../CMakeCache.txt 
[parker@stealth build]$ cmake ..             
-- The C compiler identification is GNU 9.2.0
-- The CXX compiler identification is GNU 9.2.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/parker/build/razer-laptop-control/daemon/build
[parker@stealth build]$ ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  CPackConfig.cmake  CPackSourceConfig.cmake  CTestTestfile.cmake  DartConfiguration.tcl  Makefile  Testing
[parker@stealth build]$ make -j5
Scanning dependencies of target razercontrol-daemon
[ 50%] Building CXX object CMakeFiles/razercontrol-daemon.dir/src/main.cpp.o
/home/parker/build/razer-laptop-control/daemon/src/main.cpp: In function ‘int main()’:
/home/parker/build/razer-laptop-control/daemon/src/main.cpp:31:12: error: ‘SIGCHLD’ was not declared in this scope
   31 |     signal(SIGCHLD, SIG_IGN);
      |            ^~~~~~~
/home/parker/build/razer-laptop-control/daemon/src/main.cpp:31:21: error: ‘SIG_IGN’ was not declared in this scope
   31 |     signal(SIGCHLD, SIG_IGN);
      |                     ^~~~~~~
/home/parker/build/razer-laptop-control/daemon/src/main.cpp:31:5: error: ‘signal’ was not declared in this scope; did you mean ‘signed’?
   31 |     signal(SIGCHLD, SIG_IGN);
      |     ^~~~~~
      |     signed
/home/parker/build/razer-laptop-control/daemon/src/main.cpp:32:12: error: ‘SIGHUP’ was not declared in this scope
   32 |     signal(SIGHUP, SIG_IGN);
      |            ^~~~~~
make[2]: *** [CMakeFiles/razercontrol-daemon.dir/build.make:63: CMakeFiles/razercontrol-daemon.dir/src/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:779: CMakeFiles/razercontrol-daemon.dir/all] Error 2
make: *** [Makefile:117: all] Error 2

-------------------

[parker@stealth razer-laptop-control]$ cd application/
[parker@stealth application]$ ls
build-razer-laptop-control-daemon-Desktop-Debug  razer-laptop-control-daemon
[parker@stealth application]$ cd razer-laptop-control-daemon/
[parker@stealth razer-laptop-control-daemon]$ ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  CMakeLists.txt  CMakeLists.txt.user  main.cpp  Makefile  razer-laptop-control-daemon_autogen
[parker@stealth razer-laptop-control-daemon]$ cmake .
CMake Error: The current CMakeCache.txt directory /home/parker/build/razer-laptop-control/application/razer-laptop-control-daemon/CMakeCache.txt is different than the directory /home/ashcon/code/razer-laptop-control/application/razer-laptop-control-daemon where CMakeCache.txt was created. This may result in binaries being created in the wrong place. If you are not sure, reedit the CMakeCache.txt
[parker@stealth razer-laptop-control-daemon]$ rm CMakeCache.txt 
[parker@stealth razer-laptop-control-daemon]$ cmake .           
-- The CXX compiler identification is GNU 9.2.0
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/parker/build/razer-laptop-control/application/razer-laptop-control-daemon
[parker@stealth razer-laptop-control-daemon]$ make -j5
Scanning dependencies of target razer-laptop-control-daemon_autogen
[ 25%] Automatic MOC and UIC for target razer-laptop-control-daemon
[ 25%] Built target razer-laptop-control-daemon_autogen
Scanning dependencies of target razer-laptop-control-daemon
[ 50%] Building CXX object CMakeFiles/razer-laptop-control-daemon.dir/razer-laptop-control-daemon_autogen/mocs_compilation.cpp.o
[ 75%] Building CXX object CMakeFiles/razer-laptop-control-daemon.dir/main.cpp.o
/home/parker/build/razer-laptop-control/application/razer-laptop-control-daemon/main.cpp:2:10: fatal error: QLocalServer: No such file or directory
    2 | #include <QLocalServer>
      |          ^~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/razer-laptop-control-daemon.dir/build.make:76: CMakeFiles/razer-laptop-control-daemon.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:77: CMakeFiles/razer-laptop-control-daemon.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

All the references I see to QLocalServer are Qt4. This not a viable option for current systems.

kernel coding style should be followed

As this is a Linux kernel driver, the proper coding style rules should be followed.

You can run scripts/checkpatch.pl with "--file" added to it to find the problems that need to be resolved, or I can submit a patch that does this as well (but it would touch almost every line of the driver files, and that's a bit rude of me to do without asking :)

Port to macOS?

Is there any chance of a macOS port, or would I be able to build the driver from source on macOS? This utility would be an absolute blessing on my machine that have hackintoshed.

README.md outdated in driver folder

The README still recommends installing the 0.0.1 version of the driver instead of the newest version. I think it would also be good to add sudo dkms install -m razercontrol -v 1.0.2 in order to ensure the user properly installs the module.

[BUG] Automatic fan mode doesn't work

Describe the bug
When I put the fan in automatic mode, it turns off and never comes on, even when stress testing the CPU. However, I'm still able to control the fan speed manually in the range from 3500 to 5300.

To Reproduce

  1. sudo ./rgb_test --fan auto
  2. stress --cpu 6
  3. Fan does not come on

Expected behavior
I would expect that when in automatic mode, the fan will respond to the CPU temperature and spin faster as the CPU gets hotter.

Optional but useful, packet capture from synapse
I don't know how to get this - would I need to run Windows in a VM from Linux? If so I'm willing to give it a shot if it helps with this project!

Other details that might be helpful:

Blade model: Mid 2019 Advanced Mercury White Blade 15 (Intel i7-9750H, RTX 2070)
OS: Arch Linux
Kernel: 5.4.8

Also I just wanted to give a shout-out to @UKSFM99, this is really great work and it's awesome that you've chosen to share it with the community. I'm a software engineer and would love to help out however I can, I don't have much experience with C but am interested in learning!

keyboard reset to US?

Looks like my keyboard layout gets reset when loading and/or configuring this driver?

[Seperate Fan Module] Great work

Im running a Razer Blade 14" 2014 on Arch and Im running into over heating issues, it seems my fans arent being recognized (ascpi??) Do you think you could help me move in the right direction to create a seperate fan/tempurature regulator for Razer laptops??

Feature Request - Toggle logo "on/off/Breathing"

Hi there @rnd-ash

Thanks for your effort and the driver. I was wondering whether you would be able to add the functionality in the driver to toggle the logo to the corresponding options as in synapse, meaning "on/off/Breathing". I am not sure how easy or hard is gonna be, but I think it would be nice.

Let me know what do you think and whether this would be possible.

Cheers!!!

[BUG] usr/bin/ld: cannot find -lnotify

Describe the bug
When running make in /rgb_test_service/ some compiling stuff fails

usr/bin/ld: cannot find -lnotify
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/rgb_test.dir/build.make:129: rgb_test] Error 1
make[1]: *** [CMakeFiles/Makefile2:860: CMakeFiles/rgb_test.dir/all] Error 2
make: *** [Makefile:117: all] Error 2

To Reproduce
Steps to reproduce the behavior:

  • pull newest state
  • install drivers
  • follow instructions of rgb_test

Expected behavior
install everything correctly and handle dependencies

Optional stuff

I am on a new installed ubuntu 20 LTS without special configuration.
I had to install libnotify-dev.
NOTE: it has to be libnotify-dev and not libnotify

sudo apt-get install libnotify-dev

After installing libnotify-dev everything works fine as expected.

I am not very familiar with your compiling stuff so please understand that I cannot open a pull request to handle the missing dependency correctly.

Synapse Chroma Quick Effects

Hey Ash,
here are some Quick Effect traces for my blade:

Spec:
Model: Razer Blade 15 Adv Early 2019 (Intel i7 8750H; RTX2080)
BIOS: 1.04 (1.05 Update available)
EC: 1.02 (1.03 Update available)
USB: 1.7.0

If you have questions about the traces hit me up in Discord. The filenames should provide basic infos about what I did (p.s. if theres an ABC in the filename that meant I typed a b c)

RZRSynapseQuickEffectsBlade15Adv19.zip

If other peeps also would like to provide traces Ill suggest they use this issue instead of opening a new one.

Greetings
nuudlz

Razer Blade Pro 17 2019 power_mode - 0 or 1 always yeilds Balanced mode

gillette /sys/module/razercontrol/drivers/hid:Razer laptop System control driver/0003:1532:0234.0001 # dmesg | tail
[368949.155546] Razer laptop System control driver 0003:1532:0234.0002: input,hidraw1: USB HID v1.11 Keyboard [Razer Razer Blade] on usb-0000:00:14.0-8/input1
[368949.175840] usbhid 1-8:1.2: razer_laptop_control: Supported device found!
[369097.051030] Razer laptop System control driver 0003:1532:0234.0001: Requesting MANUAL fan at 4000 RPM
[369145.515126] Razer laptop System control driver 0003:1532:0234.0001: Requesting AUTO Fan
[369432.037059] Razer laptop System control driver 0003:1532:0234.0001: Enabling Balanced power mode
[369462.970862] Razer laptop System control driver 0003:1532:0234.0001: Enabling Balanced power mode
[369471.949905] Razer laptop System control driver 0003:1532:0234.0001: Enabling Balanced power mode
[369548.262990] Razer laptop System control driver 0003:1532:0234.0001: Requesting MANUAL fan at 3500 RPM
[369553.408989] Razer laptop System control driver 0003:1532:0234.0001: Enabling Balanced power mode
[369572.662952] Razer laptop System control driver 0003:1532:0234.0001: Requesting AUTO Fan

gillette /sys/module/razercontrol/drivers/hid:Razer laptop System control driver/0003:1532:0234.0001 # echo 1 > power_mode

gillette /sys/module/razercontrol/drivers/hid:Razer laptop System control driver/0003:1532:0234.0001 # dmesg | tail
[.......]
[369572.662952] Razer laptop System control driver 0003:1532:0234.0001: Requesting AUTO Fan
[369724.843917] Razer laptop System control driver 0003:1532:0234.0001: Enabling Balanced power mode

[BUG] Keyboard and Mouse unresponsive after deep sleep

Describe the bug
Running Fedora 32, if razercontrol module is active, when I go in to a deep sleep on my 2019 Razer Blade Advanced, the compute comes back up but the keyboard and mouse are unresponsive.

I can SSH in and do a:

sudo rmmod razercontrol

sudo modprobe razercontrol

And that brings back the devices.

My "journalctl" shows the following:
"razer kernel: razercontrol: loading out-of-tree module taints kernel."
"razer kernel: razercontrol: module verification failed: signature and/or required key missing - tainting kernel"
After trying to come back from sleep event.

To Reproduce
Install fedora 32, on a razer blade device. Install razer-laptop-control dkms. Enable SSH. Note ip. Let laptop go into deep sleep (close lid, let sleep plugged in, remove plug, let laptop sleep for a while" Wake from sleep. Try to type, move mouse.

Sign in to ssh, rmmod and add mod. Try keyboard again.

Expected behavior
What should the driver do?
Sleep and wake gracefully.

Device support: Razer Blade Stealth Late 2019 GTX Model

Device support request for Razer Blade Stealth Late 2019 GTX Model

Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 004: ID 1532:024a Razer USA, Ltd Razer Blade
Bus 003 Device 003: ID 13d3:56d5 IMC Networks Integrated Camera
Bus 003 Device 005: ID 8087:0026 Intel Corp.
Bus 003 Device 002: ID 1532:007b Razer USA, Ltd Razer Viper Ultimate Dongle
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

POLL - Performance / gaming mode should change CPU governor to performance

OK guys, need an opinion here,

should I make it so that when triggering gaming mode / creator mode, the CPU governor is switched automatically to performance, and then back to default when power mode is switched back to normal?

I have noticed myself that the CPU performance increases by another 30% if i make the switch to performance governor with performance mode enabled (Really helps with gaming!)

Feature Request - using RGB for visual alerting

I am not a gamer. Nor am I very much into the RGB craze. Sorry. :-/
But I do like the thought of being able to use the keyboard or logo LED for alerting purposes.

Like a pulsing red 'M' when I have new email from a particular sender. Or a pulsing green 'D' for a discord notification. Not useful when I am sitting on the laptop, but handy when I watch TV and can just glance at the laptop (with sleeping display) to see if anything is happening.

How to get the alert out of the various apps/webpages/etc is not really the concern of this driver/utility. But if this is in place, a simple utility to fire the relevant commands to the razer controller is needed. I have been thinking how I would like this to work, as an 'end-user'.

Some sort of configfile with predefined ...stuff could allow for firing a CLI utility to say which pattern to fire and how many times. For example:

 dagb@home ~ $ ./bin/razeralert.py --help
 usage: razeralert.py [-h] [-d] [-l loops] pattern
 
 positional arguments:
   pattern     pattern to start

optional arguments:
  -h, --help   show this help message and exit
  -d, --debug  show debug output
  -l, --loops  number of loops, 0 (default) means forever


 dagb@home ~  $ ./bin/razeralert.py  mailalert

would read the configfile below and make the 'm' key pulse forever with a 3 second period.

[colors]
red = 0xff0000
green = 0x00ff00
blue = 0x0000ff

[steps]  # series of brightness values (0-255), timestep fixed at 20ms?
steps1 = 0,17,34,54,x,y,z.....
steps2 = sinus(3, 1, 128)   # predefined function, generate series given (period, multiplier, offset)
steps3 = triangle(period, multiplier, offset)   # predefined function, generate series given parameters

[sequence]  # combination of (color, steps) or series of (color, steps[n])
sequence1 = (red,steps1)
sequence1 = (red,steps[0]), (green,steps[1]), (blue,steps[2]), (red,steps[3]), (green,steps[4]),(blue,steps[5]),  ..
bluepulse = (blue, steps2)

[keysets]  # define keycombos for simplified pattern creation
keyset1 = 'a','b','c'
keyset2 = 'a','s','d','f'

[patterns]   # (combination of) ([key|keyset]/sequence/time offset)
pattern1 = (keyset1, sequence2), ('ctrl_l', sequence1, n)
mailalert = ('m', bluepulse)

Pretty sure the configfile can be repurposed for other things. :-)

[BUG] Socket doesn't exit. Is daemon running?

Describe the bug
I reinstalled package and reboot system but it's not working

> razer-cli read
Error. Socket doesn't exit. Is daemon running?

To Reproduce

  1. install razer-laptop-control-dkms-git 1.3.0.r14.g1d2f26e-1
  2. install razer-laptop-control-git 1.3.0.r14.g1d2f26e-1
  3. run razer-cli read or razer-cli --help

Expected behavior
The command works without errors.

System information
Model of my laptop: Razer Blade Stealth 13 RZ09-03272E12-R3U1

> sudo dmidecode  | grep -A3 '^System Information'
System Information
        Manufacturer: Razer
        Product Name: Blade Stealth 13 (Late 2020) - RZ09-0327
        Version: 0.04
> uname -a
Linux alexandr-pc 5.13.8-1-MANJARO #1 SMP PREEMPT Thu Aug 5 09:47:52 UTC 2021 x86_64 GNU/Linux
> cat /etc/os-release
AME="Manjaro Linux"
ID=manjaro
ID_LIKE=arch
BUILD_ID=rolling
PRETTY_NAME="Manjaro Linux"
ANSI_COLOR="32;1;24;144;200"
HOME_URL="https://manjaro.org/"
DOCUMENTATION_URL="https://wiki.manjaro.org/"
SUPPORT_URL="https://manjaro.org/"
BUG_REPORT_URL="https://bugs.manjaro.org/"
LOGO=manjarolinux
> lsusb | grep Razer
Bus 003 Device 003: ID 1532:0259 Razer USA, Ltd Razer Blade
> lsmod | grep razer
> sudo dmesg | grep razer
[    1.094793] systemd[1]: Configuration file /etc/systemd/system/razerdaemon.service is marked executable. Please remove executable permission bits. Proceeding anyway.
[   31.714816] audit: type=1131 audit(1629095642.929:82): pid=1 uid=0 auid=4294967295 ses=4294967295 subj==unconfined msg='unit=razerdaemon comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'
[  412.698048] audit: type=1130 audit(1629096044.810:90): pid=1 uid=0 auid=4294967295 ses=4294967295 subj==unconfined msg='unit=razerdaemon comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[  442.706446] audit: type=1131 audit(1629096074.820:91): pid=1 uid=0 auid=4294967295 ses=4294967295 subj==unconfined msg='unit=razerdaemon comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'
[  481.617436] audit: type=1131 audit(1629096113.730:119): pid=1 uid=0 auid=4294967295 ses=4294967295 subj==unconfined msg='unit=razerdaemon comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'
[  663.568833] audit: type=1130 audit(1629096295.678:148): pid=1 uid=0 auid=4294967295 ses=4294967295 subj==unconfined msg='unit=razerdaemon comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[  693.576355] audit: type=1131 audit(1629096325.685:149): pid=1 uid=0 auid=4294967295 ses=4294967295 subj==unconfined msg='unit=razerdaemon comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'
> sudo systemctl status razerdaemon.service
 razerdaemon.service - Razer laptop control daemon
     Loaded: loaded (/etc/systemd/system/razerdaemon.service; enabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Mon 2021-08-16 11:45:25 +05; 57min ago
    Process: 3289 ExecStart=/usr/share/razercontrol/daemon (code=exited, status=1/FAILURE)
   Main PID: 3289 (code=exited, status=1/FAILURE)
        CPU: 3ms

Aug 16 11:45:18 alexandr-pc daemon[3289]: Waiting for sysfs to be ready
Aug 16 11:45:19 alexandr-pc daemon[3289]: Waiting for sysfs to be ready
Aug 16 11:45:20 alexandr-pc daemon[3289]: Waiting for sysfs to be ready
Aug 16 11:45:21 alexandr-pc daemon[3289]: Waiting for sysfs to be ready
Aug 16 11:45:22 alexandr-pc daemon[3289]: Waiting for sysfs to be ready
Aug 16 11:45:23 alexandr-pc daemon[3289]: Waiting for sysfs to be ready
Aug 16 11:45:24 alexandr-pc daemon[3289]: Waiting for sysfs to be ready
Aug 16 11:45:25 alexandr-pc daemon[3289]: Timed out waiting for sysfs after a minute!
Aug 16 11:45:25 alexandr-pc systemd[1]: razerdaemon.service: Main process exited, code=exited, status=1/FAILURE
Aug 16 11:45:25 alexandr-pc systemd[1]: razerdaemon.service: Failed with result 'exit-code'.

installation guide for debian based systems

Hey guys,

I am really interested in this tool, but I am using Pop Os, which is debian based. I have not really much knowledge about how to built something like this from scratch, so help would be appreciated.

I guess it would make this project much more appreciated by all Linux users, if something like this would exist.

[BUG] Razercontrol module is not loaded!

Describe the bug
When trying to use the rgb_test CLI this error message shows up:

Razercontrol module is not loaded!

To Reproduce

Ubuntu 20.04 LTS
Install drivers as stated
Install rgb_test as stated
Try to run a rgb_test command as in your examples.

Expected behavior
CLI should work or give more helpful output.

Optional info
I am not familiar with driver stuff but I guess I made a mistake while installing those and updating . I used:

sudo update-initramfs -u && sudo update-grub
sudo reboot

Hangs at "Waiting for sysfs to be ready"

[user@host ~]$ razer-cli
Error. Socket doesn't exit. Is daemon running?
[user@host ~]$ sudo systemctl status razerdaemon.service -l
● razerdaemon.service - Razer laptop control daemon
     Loaded: loaded (/etc/systemd/system/razerdaemon.service; enabled; vendor preset: disabled)
     Active: active (running) since Mon 2020-08-17 10:04:17 CEST; 28min ago
   Main PID: 1065 (daemon)
      Tasks: 1 (limit: 19018)
     Memory: 1.1M
     CGroup: /system.slice/razerdaemon.service
             └─1065 /usr/share/razercontrol/daemon

Aug 16 20:57:18 host systemd[1]: Started Razer laptop control daemon.
Aug 16 20:57:18 host daemon[4284]: Waiting for sysfs to be ready
Aug 16 20:57:19 host daemon[4284]: Waiting for sysfs to be ready
Aug 16 20:57:20 host daemon[4284]: Waiting for sysfs to be ready

I'm on the latest Manjaro KDE using a Razer Blade 15 Advanced (early 2020 model) and running kernel 5.8. Would love to get this to work because the fans are way louder than I expected...

Request: See full arg list

I am not sure exactly what all of the possible args are. What is the minimum gpu/cpu limit? What is the min/max for each arg?

[BUG] Add Razer Blade 2020 Advanced Support

Bus 001 Device 003: ID 1532:0253 Razer USA, Ltd Razer Blade

razer-hardware/razer-laptop-control/driver/src/core.c:
21 case BLADE_2019_ADV:
22 return "Blade 15 2019 Advanced";
23: case BLADE_2020_ADV:
24 return "Blade 15 2020 Advanced";
25 case BLADE_2019_MERC:

razer-hardware/razer-laptop-control/driver/src/defines.h:
14 #define BLADE_2019_ADV 0x023A
15 #define BLADE_2019_MERC 0x0245
16: #define BLADE_2020_ADV 0x0253

razer-hardware/razer-laptop-control/driver/src/fancontrol.c:
18 return MAX_FAN_RPM_2018_BLADE;
19 case BLADE_2019_ADV:
20: case BLADE_2020_ADV:
21 case BLADE_2019_MERC:
22 case BLADE_PRO_2019:
..
44 switch (product_id) {
45 case BLADE_2019_ADV:
46: case BLADE_2020_ADV:
47 case BLADE_2019_MERC:
48 return 1;

razer-hardware/razer-laptop-control/driver/src/razer_common.c:
383 { HID_USB_DEVICE(RAZER_VENDOR_ID, BLADE_2019_BASE)},
384 { HID_USB_DEVICE(RAZER_VENDOR_ID, BLADE_2019_ADV)},
385: { HID_USB_DEVICE(RAZER_VENDOR_ID, BLADE_2020_ADV)},

[BUG] FAN starts up high during some processes and software installation

Hi,
I have installed the razer control modules from the driver directory and used the rgb_test fan 500 command to set the fan to 500 because I wanted the fan to be quiet: i get the expected responses:
/sys/module/razercontrol/drivers/hid:Razer laptop System control driver/0003:1532:0239.000
/sys/module/razercontrol/drivers/hid:Razer laptop System control driver/0003:1532:0239.0006
The fan would be quiet the majority of the time, however during software installations or when I start some applications like Kubernetes the fan would just blow up again. Is there a way to set the fan so that it remains quiet all the time?

Error. Socket doesn't exit. Is daemon running?

Installed driver and client, updated initramfs, rebooted, tried razer-cli, and got "Error. Socket doesn't exit. Is daemon running?"

Ubuntu 20.04
Linux 5.4.0-53-generic #59-Ubuntu SMP Wed Oct 21 09:38:44 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

$ RUST_BACKTRACE=full /usr/share/razercontrol/daemon
Sysfs ready! Starting daemon
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/driver_sysfs.rs:11:15
stack backtrace:
   0:     0x559e66eb4984 - backtrace::backtrace::libunwind::trace::ha716b483344307d4
                               at /usr/src/rustc-1.43.0/vendor/backtrace/src/backtrace/libunwind.rs:86
   1:     0x559e66eb4984 - backtrace::backtrace::trace_unsynchronized::h73191aaca03de050
                               at /usr/src/rustc-1.43.0/vendor/backtrace/src/backtrace/mod.rs:66
   2:     0x559e66eb4984 - std::sys_common::backtrace::_print_fmt::h515542a6f0149e5c
                               at src/libstd/sys_common/backtrace.rs:78
   3:     0x559e66eb4984 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hbd3babec5fee3351
                               at src/libstd/sys_common/backtrace.rs:59
   4:     0x559e66ecf90c - core::fmt::write::ha5eb378c8b683563
                               at src/libcore/fmt/mod.rs:1063
   5:     0x559e66eb46c7 - std::io::Write::write_fmt::h7525b2825ed7383d
                               at src/libstd/io/mod.rs:1426
   6:     0x559e66eaa9b5 - std::sys_common::backtrace::_print::hfec26b72b492a55c
                               at src/libstd/sys_common/backtrace.rs:62
   7:     0x559e66eaa9b5 - std::sys_common::backtrace::print::h05570acc7a135366
                               at src/libstd/sys_common/backtrace.rs:49
   8:     0x559e66eaa9b5 - std::panicking::default_hook::{{closure}}::h9278410915688d73
                               at src/libstd/panicking.rs:204
   9:     0x559e66eaa6a6 - std::panicking::default_hook::hd3a187a77f7140a0
                               at src/libstd/panicking.rs:224
  10:     0x559e66eab002 - std::panicking::rust_panic_with_hook::hb04c51c9d1a7c747
                               at src/libstd/panicking.rs:470
  11:     0x559e66eaabeb - rust_begin_unwind
                               at src/libstd/panicking.rs:378
  12:     0x559e66ecf201 - core::panicking::panic_fmt::h2e8e792413b965d4
                               at src/libcore/panicking.rs:85
  13:     0x559e66ecf14d - core::panicking::panic::h871cd04a3fc0d7bc
                               at src/libcore/panicking.rs:52
  14:     0x559e66e8f687 - std::sync::once::Once::call_once::{{closure}}::h5a9ed73db4b1462c
  15:     0x559e66eab7a8 - std::sync::once::Once::call_inner::h01ecfd1b80695d2a
                               at src/libstd/sync/once.rs:416
  16:     0x559e66e878ba - daemon::main::h696c292ce84e4186
  17:     0x559e66e97e43 - std::rt::lang_start::{{closure}}::h5385d5de9b7693b8
  18:     0x559e66eaaad3 - std::rt::lang_start_internal::{{closure}}::ha76aba2c161a67a4
                               at src/libstd/rt.rs:52
  19:     0x559e66eaaad3 - std::panicking::try::do_call::hb203df4ff1d5ed94
                               at src/libstd/panicking.rs:303
  20:     0x559e66eb8b67 - __rust_maybe_catch_panic
                               at src/libpanic_unwind/lib.rs:86
  21:     0x559e66eabd5c - std::panicking::try::h785999c549ea777b
                               at src/libstd/panicking.rs:281
  22:     0x559e66eabd5c - std::panic::catch_unwind::hbc99eda2c23b3349
                               at src/libstd/panic.rs:394
  23:     0x559e66eabd5c - std::rt::lang_start_internal::h58283c2b5ed737c9
                               at src/libstd/rt.rs:51
  24:     0x559e66e88062 - main
  25:     0x7fc972b1d0b3 - __libc_start_main
  26:     0x559e66e7d1be - _start
  27:                0x0 - <unknown>

[BUG] Command not supported. Start Marker: 05 id: 1f (Blade Stealth 13 - Early 2020)

Describe the bug

KERN_WARNING's begin spewing the following as soon as the razer laptop control daemon /usr/share/razercontrol/daemon is started from razerdaemon.service

Razer laptop control: Command not supported. Start Marker: 05 id: 1f Num Params: 34 Reserved: 03 Command: 0b Params: ff04000f00000000ff0000ff0000ff00 .

every 100 or so ☝️ messages this response is presented

[ 4614.742116] Razer laptop control: Response doesn't match request. Start Marker: 05 id: 1f Num Params: 34 Reserved: 03 Command: 0b Params: ff05000f00000000ff0000ff0000ff00 .

To Reproduce

  • Install both razer-laptop-control-dkms-git razer-laptop-control-git
  • reboot
  • dmesg -w

Expected behavior

kernel module supports the hardware id's from the blade stealth 13 2020

Supplemental Info

# uname -a

Linux archlinux 5.9.1-zen2-1-zen #1 ZEN SMP PREEMPT Sun, 18 Oct 2020 02:45:20 +0000 x86_64 GNU/Linux

# dmidecode -t system

Getting SMBIOS data from sysfs.
SMBIOS 3.2.0 present.

Handle 0x0001, DMI type 1, 27 bytes
System Information
	Manufacturer: Razer
	Product Name: Blade Stealth 13 (Early 2020) - RZ09-0310
	Version: 2.04
	Serial Number: ***************
	UUID: ******************************************
	Wake-up Type: Power Switch
	SKU Number: RZ09-03102W52
	Family: 1A581003 Razer Blade Stealth

Handle 0x000F, DMI type 12, 5 bytes
System Configuration Options
	Option 1:

Handle 0x0010, DMI type 32, 20 bytes
System Boot Information
	Status: No errors detected

Trying to install new DKMS version and make driver_dkms produces error

Describe the bug
Installing driver produces error:
Installing kernel modules for DKMS
install -m 644 -v -D Makefile /usr/src/razercontrol-0.0.1/Makefile
removed '/usr/src/razercontrol-0.0.1/Makefile'
'Makefile' -> '/usr/src/razercontrol-0.0.1/Makefile'
install -m 644 -v -D dkms.conf /usr/src/razercontrol-0.0.1/dkms.conf
install: cannot stat 'dkms.conf': No such file or directory
make: *** [Makefile:30: driver_dkms] Error 1

To Reproduce
simply try to make driver_dkms

[BUG] Installing Driver on Blade 2016 1060 breaks touchpad button functionality

Describe the bug
A clear way of describing how the driver is misbehaving
The buttons on the touchpad are no longer recognized by the OS.
To Reproduce
Steps to reproduce the behavior:

Follow steps to build driver and install it in the kernel. Restart computer and the touchpad buttons do not work.

Expected behavior
What should the driver do?

not break the touchpad buttons

Optional but useful, packet capture from synapse

If the driver is not doing as it should, it would be useful to provide a packet capture of you doing the same event in razer synapse. IE: increasing the fan RPM to 5000,

make fails on rgb_test_service

 make
Scanning dependencies of target rgb_test
[ 20%] Building CXX object CMakeFiles/rgb_test.dir/src/main.cpp.o
/home/skrapp/razer-laptop-control/rgb_test_service/src/main.cpp:3:10: fatal error: filesystem: No such file or directory
 #include <filesystem>
          ^~~~~~~~~~~~
compilation terminated.
CMakeFiles/rgb_test.dir/build.make:62: recipe for target 'CMakeFiles/rgb_test.dir/src/main.cpp.o' failed
make[2]: *** [CMakeFiles/rgb_test.dir/src/main.cpp.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/rgb_test.dir/all' failed
make[1]: *** [CMakeFiles/rgb_test.dir/all] Error 2
Makefile:116: recipe for target 'all' failed
make: *** [all] Error 2

How to launch GUI?

Hello,

I have Installed razer-laptop-control-git and razer-laptop-control-dkms-git using paru (pacman) on Arch Linux.

As a quick test, Keyboard backlight setting works.

But I couldn't figure out how to launch razer_control_gui? Can instructions be added for this?

I want to keep this installed via pacman if possible, but I don't know where paru/pacman holds package sources so I can't find an executable to try and run.

good experience thus far.

Best Regards,

Duncan

Guide for new users to linux

I really want to try and use this but being new to linux I have no idea how to install this.

My laptop Razer blade 2019 advanced model runs way to hot in linux and I think this will help.

If you could please write a step by step guide for someone brand new to linux it would help a lot.

I currently use Manjaro linux

Mahalo!

Feature Request: RAZER BLADE 15 BASE 2019

Sorry guys,

Id like to ask if anyone has done it work on the razer blade 15 Base model 2019,
In fact I tried to install the dirver and could not use it.

Here are the list of files inside my /sys/module/razercontrol/drivers/hid:Razer laptop System control driver

bind module new_id uevent unbind

Razer Blade 15 Early 19 - Synapse Balanced; Gaming; Creator Modes

Hey Ashcon,

here some traces from my Synpase.

Model: Razer Blade 15 Adv Early 2019 (Intel i7 8750H; RTX2080)
BIOS: 1.04 (1.05 Update available)
EC: 1.02 (1.03 Update available)

File 1: Rzr-Blade15-Early19-Balanced-Creater-USB1.7.0.pcapng
Switched modes 10 times, starting on Balanced mode. Both mode were on Auto-Fan.

FIle 2: Rzr-Blade15-Early19-Balanced-Gaming-USB1.7.0.pcapng
Switched modes 10 times, starting on Balanced mode. Both mode were on Auto-Fan.

USB Port is 1.7.0 this time.

RZR-Synpase-Modes-Traces.zip

[BUG] Wrong maximum FAN RPM for Razer Blade 2019 ADV models

Describe the bug
You aren't able to speed up the fans to their maximum rpm 5300.

To Reproduce
./rgb-test --fan 5300 -> check dmesg: fan speed will be set to 5000

Expected behavior
fancontrol.h

+ // 2019 early/ mid/ late Blade ADV
+ #define MAX_FAN_RPM_2019_BLADE 5300

fancontrol.c

static int get_max_fan_rpm(__u32 product_id)
{
	switch (product_id) {
	case BLADE_2018_ADV:
	case BLADE_2018_BASE:
		return MAX_FAN_RPM_2018_BLADE;
	case BLADE_2017_STEALTH_MID:
	case BLADE_2017_STEALTH_END:
	case BLADE_2019_STEALTH:
		return MAX_FAN_RPM_STEALTH;
+	case BLADE_2019_ADV:
+		return MAX_FAN_RPM_2019_BLADE;
	default:
		return MAX_FAN_RPM_DEFAULT;
	}
}

[BUG] Lost device after Manjaro update

Describe the bug
Decembers update to Manjaro broke the device entries, they're now missing. I'm assuming this is related to the kernel upgrade. Prior to filing i deleted razercontrol.ko, rebuilt, and rebooted.

# pwd
/sys/module/razercontrol/drivers/hid:Razer laptop System control driver
# ls
bind  module  new_id  uevent  unbind

To Reproduce
Use:

Linux blade 5.4.6-2-MANJARO #1 SMP PREEMPT Tue Dec 24 15:55:20 UTC 2019 x86_64 GNU/Linux```

[BUG] Cannot Reboot Normally after install

Distribution
Pop_OS! 21.10 Beta
uname -a output
Linux jamming 5.15.2-76051502-generic #202111121041~1636734399~21.10~1c02b32 SMP Fri Nov 12 16:56:49 U x86_64 x86_64 x86_64 GNU/Linux
Razer Laptop I have: RZ09-3009E97 / (openrazer: 1532:0246)

After installing openrazer when attempting to shutdown normal through the gui / terminal i get this output, then will not shutdown.
(I'm pretty sure this is a kernel 5.15 problem since i have not had this problem in the past.)
Problem also occurs with openrazer

Output on screen after trying to shutdown
[ 5468.766665] wlo1: deauthenticating from 78:23:ae:86:fb:39 by local choice (Reason: 3=DEAUTH_LEAVING)
[ 5468.766681] fbcon: Taking over console
[ 5468.779791] Console: switch to colour frame buffer device 240x67

Haven't found anything on this same issue, its not a big problem for me but i wanted to bring attention to it in case someone knows how to fix it :)

[BUG] Power Draw

Describe the bug
The razercontrol daemon is one of the biggest energy users in my system according to powertop. Either I do not understand what powertop is reporting to me, or this daemon is consuming more power than any other app on my machine.

To Reproduce
Install

Expected behavior
Potentially draw less power?

944 mW 14.0 ms/s 233.5 Process [PID 939] /usr/share/razercontrol/daemon

[FEATURE] Access to new boost option

For advanced model 2020 there is new option for CPU power named BOOST, which increase TDP value to 85W short and 55W for long term. Can we have access to it pls?

Feature Request - fn_toggle for media keys

Hello!

I'm using a razer blade 13 late 2019, I've came across your driver and successfully installed it on manjaro linux.
Do you think it would be possible to add the ability to enable fn_toggle option of the driver?
I would love to be able to click on the media keys/volume/brightness without the fn key.

Thank you and let me know if I could help in any way.

PS: by the way I assume there is no GUI (tray icon?) in order to set up the driver?

Thank you!

[BUG] RazerDaemon errors on start from boot

The daemon errors out when booting, after logging in then restarting the daemon using the exec as root allows the daemon to work.

`razerdaemon.service - Razer laptop control daemon
Loaded: loaded (/etc/systemd/system/razerdaemon.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2020-07-27 21:08:59 CDT; 47s ago
Process: 889 ExecStart=/usr/share/razercontrol/daemon (code=exited, status=101)
Main PID: 889 (code=exited, status=101)

Jul 27 21:08:59 nalin-blade-manjaro systemd[1]: Started Razer laptop control daemon.
Jul 27 21:08:59 nalin-blade-manjaro daemon[889]: thread 'main' panicked at 'called Result::unwrap() on an Err value: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/driver_sysfs.rs:11:15
Jul 27 21:08:59 nalin-blade-manjaro daemon[889]: note: run with RUST_BACKTRACE=1 environment variable to display a backtrace
Jul 27 21:08:59 nalin-blade-manjaro systemd[1]: razerdaemon.service: Main process exited, code=exited, status=101/n/a
Jul 27 21:08:59 nalin-blade-manjaro systemd[1]: razerdaemon.service: Failed with result 'exit-code'.`

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.