Logitech K810 + Ubuntu

The Logitech K810 is a nice keyboard, but it does not work with Ubuntu out of the box. Still contrary to what some websites might lead you to believe, it does work. The following instructions worked for me on Ubuntu 13.10 & 14.04.

  1. Start a terminal (terminal 1)
  2. Install the tools needed for this walk-through
    sudo apt-get install bluez-hcidump bluez-utils blueman
  3. Enable Bluetooth on your Ubuntu machine (you might have a hardware button, don’t forget about that)
  4. Start the bluetooth manager (blueman) from your start menu, dash, or whatever other way of starting programs your desktop has
  5. Start another terminal (terminal 2) – yep you’ll need two for this exercise
  6. Get the K810 into pairing mode by pressing the button on the back of the keyboard and then one of the device buttons on the front (F1-F3). You should see the bluetooth light flashing now.
  7. In terminal 1 run
    hcitool scan

    if the K810 is found this should give you something like

    Scanning ...
           xx:xx:xx:xx:xx:xx   Logitech K810
  8. Copy the address of your K810 (that’s the xx:xx:xx:xx:xx:xx)
  9. In terminal 2 run
    sudo hcidump -at | grep pass
  10. In terminal 1 run
    sudo bluez-simple-agent hci0 xx:xx:xx:xx:xx:xx
  11. In terminal 2 you should now see the passkey which is a number
  12. Type that code on your K810 followed by enter
  13. The bluetooth manager should now show the K810.
  14. In blueman select the K810 and mark it as “trusted”
  15. Now click on Setup and follow the dialog box.
  16. Tada, you’re done, you can now close all terminals as well as blueman.

The Function Keys

By default, the function keys (the ones above the numbers row) are assigned to special functions like media control, which I find annoying. – Every time you want to do something normal like Alt-F4 or search via F3 you need the Fn key. Logitech’s windows software on the other hand lets you invert the Fn key. Actually all the Windows software does is to send a certain string of commands to the keyboard, which some clever Linux Guru has reverse engineered and coded into a nice little program, that can be found at  http://www.trial-n-error.de/posts/2012/12/31/logitech-k810-keyboard-configurator/. I’ll again add a step-by-step guide:

  1. Optional: Go to http://www.trial-n-error.de/posts/2012/12/31/logitech-k810-keyboard-configurator/ and read about how he did it ;)
  2. Install a compiler
    sudo apt-get install build-essential
  3. Download and extract Mario’s program
    wget https://blog.chschmid.com/media/k810_conf-v0.1.tar.bz2
    tar -jxf k810_conf-v0.1.tar.bz2
  4. Compile it
  5. Run it
    sudo ./k810_conf -d /dev/hidraw<x> -f on

    You will have to replace <x> by the hid number that was assigned to your keyboard. In my case it is hidraw2. Of course there are more clever ways, but just work through the numbers brute force starting with hidraw0. – Mario’s program is clever enough to detect if it’s not the K810.

72 thoughts on “Logitech K810 + Ubuntu

  1. Vincent

    Hey Christian,

    Many thanks for the write up, from everything which can be found, this was the only tutorial which worked for me.
    The only thing which might be something you want to correct is following:
    sudo bluez-simple-agent xx:xx:xx:xx:xx:xx
    should be:
    sudo bluez-simple-agent hci0 xx:xx:xx:xx:xx:xx

    Thanks again!

    1. Christian M. Schmid (Post author)

      Thanks for your comment! You are absolutely right, the hci0 was missing, thanks for pointing that out to me! I fixed it in the original post.

  2. John Weiner

    I was able to get my Ligitech 810 keyboard installed per your procedure. I am not sure what blueman does, however, or the start menu is (I am fairly inexperienced with Ubuntu). When I boot up 13.10, I get the bluetooth icon in the upper right corner and the bluetooth adapter is recognized without problems.

    1. Christian M. Schmid (Post author)

      Sorry, if it wasn’t clear. I meant the Ubuntu dash. Blueman is just a “more powerful” bluetooth manager than the Ubuntu default.

  3. John Weiner

    Yes, I more or less figured out what you meant; and I am pleased to see that you confirm it. The only small problem I have now sometimes is that the keyboard seems to go to sleep (or something) if one does not type on it after a certain short period of time. I keep getting a little warning message on the Ubiquity GUI saying that the keyboard battery is dangerously low. Typing a key seems to wake it up and the message goes away until the next time.

  4. John Weiner

    Actually I am finding two little problems: (1) Sometimes when I pause from typing for a few seconds, when I start again it takes 2-3 keystrokes before they are detected (presumably not before the keyboard “wakes up” or something). (2) Every once in a while a keystroke will repeat in a “runaway” fashion for a line or two. Typing the back key or enter key or something else eventually stops it. I don’t the key is getting mechanically stuck.

    Have you experienced these problems, and do you have any suggestions for mitigating them?

    1. Jack Lenox

      I’m having this exact same problem with this keyboard. I feel as though I’ve tried everything. Did you ever manage to resolve this John?

  5. Michael

    you made my day. Thanks for that.
    But sometimes when I type, something goes wrong and I can’t type anymore
    Than I had to disconnect and reconnect the keyboard.
    Have you some experience like that?

    1. Christian M. Schmid (Post author)

      udev can help you achieve this. E.g. just create a new udev rule that runs a command when a new hidraw device found. Here’s what such a config file could look like

      christian@c1:/etc/udev$ cat /etc/udev/rules.d/00-k810.rules

      KERNEL==”hidraw*”, SUBSYSTEM==”hidraw”, ATTRS{address}==”00:1F:AA:BB:CC:DD”, \
      RUN+=”/srv/scripts/k810.sh %p”

      Hope this helps. Cheers!

      1. Michael

        Yeah cool that works.
        Here is my solution:
        KERNEL==”hidraw*”, SUBSYSTEM==”hidraw”, ATTRS{address}==”00:1F:20:92:F1:C8”, \
        RUN+=”/srv/scripts/k810.sh %p”

        #! /bin/bash
        line=`dmesg | grep -i k810 | grep hidraw`
        [[ $line =~ (.*)(hidraw+[^:])(.*) ]]
        /srv/bin/k810_conf -d /dev/${device} -f on

  6. Scott Christian

    Hey Christian,
    Just wanted to thank you for this post. I’m planning on using this method. (Found on logitech support site) Clear and concise.

    You rock.

    1. Scott Christian

      So I went through with this and it went mostly without a hitch. After I restarted though suddenly my bluetooth refuses to be recognized. I don’t blame the guide though. Oh well c’est la linux. I’ll figure it out ;]

      1. Christian M. Schmid (Post author)

        Oops, that’s not what’s supposed to happen. Please let me/us know what’s wrong when you’ve figured it out. C’est la linux bluetooth. Good luck ;)

  7. Scott Deagan

    Thanks so much for taking the time and effort to write up these instructions. Your instructions are the only ones I have found on the Web that actually work for getting the Logitech K810 working flawlessly with Ubuntu 14.04.

    Thanks once again, really appreciate it.

  8. spacemokey

    Confirmed working for Logitech K760 keyboard on Ubuntu 14.04 LTS. (did not try changing the keys)

  9. Dave Nelson

    Hi Christian,

    I’ve got a Logitech K810 that I’m trying to connect to my Ubuntu Gnome 14.04 (tew installation from the Ubuntu Gnome

  10. Thomas Hood

    I have a system76 laptop running Ubuntu 14.04 and I bought a Logitech K810 keyboard. After switching on the keyboard, a Search in Bluetooth Manager showed the keyboard. Right clicking on the entry for the keyboard allowed me to enter a challenge PIN. I entered “1234” and hit Forward, then entered “1234” and Enter on the keyboard. This paired the keyboard successfully. I then right clicked the entry and clicked on Trust. I didn’t have to run any command line tools and the keyboard works fine, even for logging in and after suspend.

  11. Knut Remi Løvli

    I made an alternate walkthrough for Ubuntu 14.04 that doesn’t use blueman. This one assumes you know what a MAC address is, you know how to deal with terminal commands, you’re familiar with how to navigate various menus, and you’re very familiar with both your keyboard and Ubuntu’s GUI. You have to configure the function keys again on every startup though.

    sudo apt-get install bluez-hcidump bluez-utils

    Bluetooth menu -> New device setup…

    Put the keyboard in pairing mode and pick a profile

    Select the keyboard and click continue (don’t enter the code)

    hcitool scan

    sudo hcidump -at | grep pass

    Put the keyboard in pairing mode and pick a profile again

    In the new device wizard, click try again, select the keyboard and click continue

    Enter the code shown in the terminal on your keyboard and press enter

    Replace the placeholder MAC address with the one from the terminal you copied:
    bluez-test-device trusted xx:xx:xx:xx:xx:xx yes

    sudo apt-get install build-essential

    wget https://blog.chschmid.com/media/k810_conf-v0.1.tar.bz2

    tar -jxf k810_conf-v0.1.tar.bz2


    Try the following command multiple times but replace # with numbers from 0 and up until it reports a write:
    sudo ./k810_conf -d /dev/hidraw# -f on

    Here’s my bug report for the wrong code shown in the new device wizard.

  12. Andreas

    Thanks for the great post and the very useful comments.

    This solution was the only one I could get working on Crunchbang (= Debian Wheezy).

    I’m still strugling to get the FN button reversal permanent. Mario’s program works and it even survives if I reboot, suspend or hibernate the computer.

    It doesn’t survive if I turn the keyboard off/on (to save power and to have it not light up oon every touch, turning the keyboard off when not using it is practical.)

    Well, to get the FN button reversal working after the keyboard has been turned off and on again I’ve been trying to make a udev rule.

    My setup is exactly as described above (but with my own mac adress, off course) but it’s not working.

    This is what I’ve got:

    andreas@crunchbang:/etc/udev/rules.d$ cat 00-k810.rules
    KERNEL==”hidraw*”, SUBSYSTEM==”hidraw”, ATTRS{address}==”00:1F:20:76:41:30”, \
    RUN+=”/srv/scripts/k810.sh %p”

    andreas@crunchbang:/srv/scripts$ cat k810.sh
    #! /bin/bash
    line=`dmesg | grep -i k810 | grep hidraw`
    [[ $line =~ (.*)(hidraw+[^:])(.*) ]]
    /srv/bin/k810_conf -d /dev/${device} -f on

    The /srv/bin/ folder does indeed contain Mario’s program and running the scripts like this:

    sudo /srv/scripts/k810.sh

    … works.

    But I can’t get the udev rule to automatically start the script when the device is detected (neither when starting the computer nor when turning the keyboard off/on.

    Any ideas on what I could try?

    1. jonghyun

      great script!

      #! /bin/bash
      line=`dmesg | grep -i k810 | grep hidraw`
      [[ $line =~ (.*)(hidraw+[^:])(.*) ]]
      ./k810_conf -d /dev/${device} -f on

  13. Johnk57

    Nice blog! Is your theme custom made or did you download it from somewhere? A theme like yours with a few simple tweeks would really make my blog stand out. Please let me know where you got your design. Bless you dkddgcdefdbd

  14. Maison Pulaski

    Thanks so much for this write up. I am a brand new Ubuntu user (2 days on 14) and was able to follow your instructions and get my k810 working. So again, thanks a bunch.

  15. Michael Stein

    Yesterday evening I had a very special moment with my k810.
    The keys “<" and "^" swapt!
    After digging in the net without finding anything I tried some keys …
    And tadaaaa:
    Are there any other stupid hidden functions in that keyboard?

  16. Per Raymond

    Managed to get the keyboard working,but after rebooting into win8 and back to mint I’m not able to pair the keyboard. The keyboard is listed in the bluetooth manager. What can I do to get it working again?

  17. Dr. Anand Ramachandran

    Thank you very much for posting this. I bought a K810 recently and thanks to you I have got it to work on ubuntu.

  18. muss

    too bad the fix for FN key doesnt work on K811. i believe that would require a different hardware string to start with :/

  19. Jon Phillips

    Thanks for this! I got my k760 working via bluetooth, but then had to change a few lines to get the appropriate keycodes, as noted here:


    Did anyone else have any more luck with this? I had to run:

    $ sudo ./k810_conf -d /dev/hidraw0 -f on

    And then receive:

    write: 0 were written instead of 7.

    And, the function keys are unaffected.

    Any help?


  20. Anthony Borrow

    I got a Logitech 920-004569 Tablet Keyboard to use with my Android phone; however, I also like the convenience of using it with my laptop (a System 76 Bonobo) and while the Bluetooth Manager was able to detect Logitech Tablet Keyboard for some reason after entering the pairing code it failed to actually pair. I followed the instructions and now it works like a champ. Thanks for making these available. Peace – Anthony

  21. Cedric

    I use to use Linux Mint and so far I never had any issue with my keyboard.
    After I upgraded to Mint version 17 I could successfully pair my K810, but for some reason it stopped working.
    After following the instructions it worked perfectly.

  22. Andy Turfer

    Still works for Ubuntu 14.04. This has become my “go to” guide for setting up a K810 with Ubuntu.

    Thank you very much for creating and sharing this guide.

  23. Andy Turfer

    Just a heads-up to all you pioneers out there who want to get the Logitech K810 working with the latest (at time of writing) build of Ubuntu 15.04: hcidump is not currently (at time of writing) available in the package repo, so you need to modify step 2 in the instructions above from this:

    sudo apt-get install bluez-hcidump bluez-utils blueman

    to this:

    sudo apt-get install bluez-utils blueman

    Then download hcidump from here:


    and then build it from source. I used the following to accomplish this (note the version I downloaded is correct at time of writing – modify it as necessary):

    wget http://www.kernel.org/pub/linux/bluetooth/bluez-hcidump-2.5.tar.xz
    tar -xvf bluez-hcidump-2.5.tar.xz
    cd bluez-hcidump-2.5.tar.xz
    ./configure --prefix=/usr --mandir=/usr/share/man
    sudo make install

  24. Dany

    Hello i fallowed your guide and Ubuntu detected my keyboard than i compiled the conf.c file and than execute it. I was not able to find what hidraw number my keyboard has… I dont know where to look to find it. I get this error after executing the conf file ./k810_conf -d /dev/hidraw -f on
    bash: syntax error near unexpected token `20′ i went up to 20… how far can i go ? i mean isnt there a way to find the number my keyboard was assigned ?

    Other than that the FN keys work in reverse… when i do not press fn i get the fn functions from f1 to f12 and when i press FN i get the keys running as f1 f2 etc….

    I would appreciate some guidance

    1. Dany

      I managed to get the fn keys to work..all i needed to add was sudo ./k810_conf -d /dev/hidraw3 -f on and now everything works like a charm thanks for this work that you did :)

  25. ken

    I just got this brand new laptop.
    I bought a logitech wireless mouse M570 with unifying receiver, and it works flawlessly.
    I of course also bought the logitech K810 bluetooth keyboard.
    No luck wit the instructions above.

    hcitool scan – shows nothing.
    thoughts? please and thanx :)

    kc@kC-laptop ~ $ lsusb
    Bus 001 Device 002: ID 8087:8000 Intel Corp.
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 002 Device 005: ID 03eb:8a1d Atmel Corp.
    Bus 002 Device 004: ID 0bda:b728 Realtek Semiconductor Corp.
    Bus 002 Device 003: ID 5986:055e Acer, Inc
    Bus 002 Device 002: ID 046d:c52b Logitech, Inc. Unifying Receiver
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    kc@kC-laptop ~ $ lsmod | grep bluetooth
    bluetooth 391136 22 bnep,btusb,rfcomm
    kc@kC-laptop ~ $ dmesg | grep -i bluetooth
    [ 2.221447] usb 2-6: Product: Bluetooth Radio
    [ 3.886309] Bluetooth: Core ver 2.17
    [ 3.886328] Bluetooth: HCI device and connection manager initialized
    [ 3.886336] Bluetooth: HCI socket layer initialized
    [ 3.886339] Bluetooth: L2CAP socket layer initialized
    [ 3.886343] Bluetooth: SCO socket layer initialized
    [ 4.096788] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
    [ 4.096792] Bluetooth: BNEP filters: protocol multicast
    [ 4.096800] Bluetooth: BNEP socket layer initialized
    [ 4.106031] Bluetooth: RFCOMM TTY layer initialized
    [ 4.106042] Bluetooth: RFCOMM socket layer initialized
    [ 4.106047] Bluetooth: RFCOMM ver 1.11
    kc@kC-laptop ~ $ lspci -nnk
    00:00.0 Host bridge [0600]: Intel Corporation Haswell-ULT DRAM Controller [8086:0a04] (rev 0b)
    Subsystem: Lenovo Device [17aa:3978]
    00:02.0 VGA compatible controller [0300]: Intel Corporation Haswell-ULT Integrated Graphics Controller [8086:0a16] (rev 0b)
    Subsystem: Lenovo Device [17aa:3978]
    Kernel driver in use: i915
    00:03.0 Audio device [0403]: Intel Corporation Haswell-ULT HD Audio Controller [8086:0a0c] (rev 0b)
    Subsystem: Lenovo Device [17aa:3978]
    Kernel driver in use: snd_hda_intel
    00:14.0 USB controller [0c03]: Intel Corporation Lynx Point-LP USB xHCI HC [8086:9c31] (rev 04)
    Subsystem: Lenovo Device [17aa:3978]
    Kernel driver in use: xhci_hcd
    00:16.0 Communication controller [0780]: Intel Corporation Lynx Point-LP HECI #0 [8086:9c3a] (rev 04)
    Subsystem: Lenovo Device [17aa:3978]
    Kernel driver in use: mei_me
    00:1b.0 Audio device [0403]: Intel Corporation Lynx Point-LP HD Audio Controller [8086:9c20] (rev 04)
    Subsystem: Lenovo Device [17aa:3978]
    Kernel driver in use: snd_hda_intel
    00:1c.0 PCI bridge [0604]: Intel Corporation Lynx Point-LP PCI Express Root Port 1 [8086:9c10] (rev e4)
    Kernel driver in use: pcieport
    00:1c.2 PCI bridge [0604]: Intel Corporation Lynx Point-LP PCI Express Root Port 3 [8086:9c14] (rev e4)
    Kernel driver in use: pcieport
    00:1c.3 PCI bridge [0604]: Intel Corporation Lynx Point-LP PCI Express Root Port 4 [8086:9c16] (rev e4)
    Kernel driver in use: pcieport
    00:1c.4 PCI bridge [0604]: Intel Corporation Lynx Point-LP PCI Express Root Port 5 [8086:9c18] (rev e4)
    Kernel driver in use: pcieport
    00:1d.0 USB controller [0c03]: Intel Corporation Lynx Point-LP USB EHCI #1 [8086:9c26] (rev 04)
    Subsystem: Lenovo Device [17aa:3978]
    Kernel driver in use: ehci-pci
    00:1f.0 ISA bridge [0601]: Intel Corporation Lynx Point-LP LPC Controller [8086:9c43] (rev 04)
    Subsystem: Lenovo Device [17aa:3978]
    Kernel driver in use: lpc_ich
    00:1f.2 SATA controller [0106]: Intel Corporation Lynx Point-LP SATA Controller 1 [AHCI mode] [8086:9c03] (rev 04)
    Subsystem: Lenovo Device [17aa:3978]
    Kernel driver in use: ahci
    00:1f.3 SMBus [0c05]: Intel Corporation Lynx Point-LP SMBus Controller [8086:9c22] (rev 04)
    Subsystem: Lenovo Device [17aa:3978]
    02:00.0 Network controller [0280]: Realtek Semiconductor Co., Ltd. RTL8723BE PCIe Wireless Network Adapter [10ec:b723]
    Subsystem: Lenovo Device [17aa:b736]
    Kernel driver in use: rtl8723be
    03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 10)
    Subsystem: Lenovo Device [17aa:3818]
    Kernel driver in use: r8169
    04:00.0 3D controller [0302]: NVIDIA Corporation GM108M [GeForce 840M] [10de:1341] (rev a2)
    Subsystem: Lenovo Device [17aa:3817]

  26. nika

    This works very well under Kubuntu 15.04. I didn’t even need blueman though, I just used the built-in KDE bluetooth manager.

  27. Andy Turfer

    Good news: with Ubuntu 15.10 the Logitech K810 can be added “normally” (i.e. the same way you add any Bluetooth device: by clicking on the Bluetooth icon in the top bar, clicking on “Bluetooth Settings”, then clicking the “+” sign and locating the K810).

    1. Bashir

      Hi Andy,

      thank you for your answer (below) and sorry for the late response but I just realized someone answer me. I have tried to add the keyboard through the default bluetooth app on ubuntu 15.10 and it’s still not working. It doesn’t get to the point where it is supposed to give a key. It just say “setting up up ‘logitech k810’ failed. Any ideas?

      1. Bashir

        Sorry for the repeated messages Andy, I actually just made it work. It actually doesn’t even ask for a passkey and I just connect from the top right corner!

  28. maoh

    hi @ all, i just tryed to connect the logitech k810 on ubuntu 15.10, but it does not work. pairing was ok, but connection it does not work!

    1. maoh

      update: it works now for me. i disconnected all other stuff from bluetooth and connected at first the keyboard. then the rest (mouse, … ).

  29. Bashir

    Just for the record, I am trying to connect my k810 to ubuntu 15.10, and for some reason I get this message in the terminal:
    sudo: bluez-simple-agent: command not found
    Also bluez-utils does not exist in the repository (maybe its equivalent is bluez-tools?)

    Any thoughts?

    1. Andy Turfer

      @Bashir: Read my comments above. With Ubuntu 15.10, you do not need to follow the steps above to connect the Logitech K810 – you can simply add it as you would any other Bluetooth device. If you want to follow the steps above, I have left a comment here on how to download, build and install bluez-simple-agent.

  30. Sid

    Dear Christian,

    Greetings from Scandinavia. I suppose Canonical has made it easier for us to pair our bluetooth keyboards to our Ubuntu machines without any fuss.
    I simply switched on the keyboard and added the keyboard using the in-built bluetooth tool.


    I have to sign in with my wired keyboard everytime. And once I am past the lock screen that requires password, it’s all okay – as in K810 works like a charm.
    May I ask if you could me how I can et it up in a way that I don’t have to wait to get past the lock screen to be able to use the keyboard.

  31. antoni

    Thank you for your very nice page. It help me to decide to buy this nice keyboard.

    In my case with Ubuntu 14.04 it has worked out of the box.

    I bought a CSL bluetooth nano-stick (https://www.amazon.es/gp/product/B00J2UEBY0/ref=cfb_at_prodpg). As soon as I plugged the bluetooth icon in the upper toolbar showed up. Then I followed point 6 of your instructions about pairing the keyboard. The keyboard device got recognized immediately, and right now I am using it.

    Thanks !!

  32. Jack S Vinyard

    I did not have to do anything special to get my Logitech K810 keyboard to work. I just turned it on, and paired it with my machine. It immediately worked like a charm. I am running Ubuntu 16.04

  33. Marten


    Thank you very much for this information. Very helpful. ?
    I’ve made a bash only version of the k810_conf program. It seems to work just fine for me, but use it at your own risk.
    It finds (the first) K810 by itself and sends the magic string to it.



    # bash version of this program
    # https://blog.chschmid.com/media/k810_conf-v0.1.tar.bz2


    case $1 in
        on) ;;
        off) ;;
        *) echo “Usage: $(basename $0) on|off”
           exit 1

    if [  “$(whoami)” != “root” ]
        echo “Must be run as root (sudo)”
        exit 1

    for d in $(ls -1 /sys/class/hidraw/hidraw*/device/uevent)
        if [ -n “$(cat $d | grep ‘HID_NAME=Logitech K810’)” ]
    h=$(echo “${d}” | grep -o ‘hidraw[0-9]’)
    case $1 in
    echo -n -e ${k810_seq_fkeys_on} | dd oflag=nonblock of=/dev/${h} 2> /dev/null
    echo -n -e ${k810_seq_fkeys_off} | dd oflag=nonblock of=/dev/${h} 2> /dev/null
    exit 0

    echo “No ‘Logitech K810’ keyboard found”

  34. Adam

    Yes! finally, this has been bothering me for years, just not enough to find a solution for it. Just dug out this keyboard for working from home and the “enhanced” mode was really pushing my patience to the limit. This worked like a charm, thank you!

  35. Anastasiia

    Thank you so much for this tutorial! I spent eternity trying to toggle a FN button, cause it is annoying as hell


Leave a Reply

Your email address will not be published. Required fields are marked *