1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Make a version for Linux

Discussion in 'Feature Suggestions' started by JJB, Jan 5, 2016.

  1. JJB

    JJB New Member

    I would really like to have the server run on Linux and a client for a Chromebook. Then I could connect all my machines nicely.
     
  2. Seungjin Lee

    Seungjin Lee Member

    Hi JJB,

    Have you tested if Across Server on the Win10 PC work with your Linux machine and Chromebook? If not, would you please test if Linux and Chromebook work well or not as you connected your Android tablet?

    We will support both Across Server and Client for Linux in someday but the implementation of other cool features has a priority.

    Thanks for the suggestion.
     
  3. JJB

    JJB New Member

    Unfortunately, Chromebook's bluetooth will only connect to mice, keyboards, and speaker/headphones. When I try to connect to another computer it will attempt the connection, but then fails with authentication error.
     
  4. Seungjin Lee

    Seungjin Lee Member

    Thanks for the answer.

    Across makes a PC work as a standard keyboard. So there should be no problem in pairing with Chromebook. However, I think Chromebook have never seen a keyboard having built-in screen. :rolleyes:
     
  5. turomar

    turomar New Member

    +1 vote for a linux version. raspi, specifically. the zero W and pi3 have onboard bluetooth.
     
  6. Seungjin Lee

    Seungjin Lee Member

    Hello turomar,

    Thanks for joining us!
    We are pursuing closed source projects which do not fit well on multiple platforms like ARM. That will be the obstacle but we'll overcome!
     
  7. JHF

    JHF New Member

  8. Seungjin Lee

    Seungjin Lee Member

    JHF, thanks for your comment.
    I'm not saying that it's impossible or hard to implement program in Linux but that it's hard to deploy program to all Linux systems wherever users want. Of course it's easy to deploy on PC Linux as we have PC to develop, run and test it. However Linux is running on many devices (e.g., Rasberry Pi, ...) besides PC. If our project would be open source, users can modify, build, run and test our program on their systems. Otherwise we need to get each device that user wants to run across.

    As turomar said in previous post, turomar wants to run our SW on Rasberry Pi 3. To do that, we need Rasberry Pi 3 to support it.

    Anyway, it is first to implement it regardless of whether it will be open source or not. So we will start to implement it for PC only.
     
    Last edited: Sep 12, 2017
  9. webcoachonline

    webcoachonline New Member

    Love love love Across...
    The best way to really have 3 screens while working at home: 2 old tablets and my macbook in the middle.
    But I'd love to have it for linux, ubuntu as well @ the office, so here is another plead to... have Across server compiled for Linux!
     
  10. Wes

    Wes New Member

    I have to add in my "please" too! I have used Symless Synergy for a while now, and also found ShareMouse, these are all great tools but nobody covers all bases. As a developer I use all of the OS every day, Linux actually being my preferred environment. Synergy works across my Windows, Linux and Mac machines, but tends to stop working a lot too. Then because I like toys, I got a Samsung Dex the other day leading me to Across. I would like to add that to the mix, but now my Linux machine is left out without running both Synergy and Across. Would be great to have a solution for all!
     
  11. Seungjin Lee

    Seungjin Lee Member

    Working hard to develop the Linux version. :)

    [​IMG]

    Far from production ready... :oops:

    Merry Christmas!
     
    Last edited: Dec 24, 2019
  12. Seungjin Lee

    Seungjin Lee Member

    Finally, we have got the detailed design mockup! :D

    [​IMG]

    Let's implement it beautifully! ... :oops:
     
  13. Seungjin Lee

    Seungjin Lee Member

    What's the best way to deploy across in linux? There will be 2 processes: acrossd and AcrossCenter like in macOS. acrossd runs in a systemd service and AcrossCenter runs by auto-start during login.
    Code:
    THIS-PC:/usr/local/bin/across$ ldd ./acrossd
        linux-vdso.so.1 (0x00007ffec6d44000)
        libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007fd42c9ef000)
        libbluetooth.so.3 => /usr/lib/x86_64-linux-gnu/libbluetooth.so.3 (0x00007fd42c7cc000)
        libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007fd42c40b000)
        libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007fd42c17e000)
        libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007fd42bcb3000)
        libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007fd42ba2f000)
        libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fd42b828000)
        libTurboActivate.so => /usr/lib/libTurboActivate.so (0x00007fd42b522000)
        libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fd42b1ea000)
        libQt5Widgets.so.5 => /home/pcuser/Qt5.14.1/5.14.1/gcc_64/lib/libQt5Widgets.so.5 (0x00007fd42a98c000)
        libQt5Gui.so.5 => /home/pcuser/Qt5.14.1/5.14.1/gcc_64/lib/libQt5Gui.so.5 (0x00007fd42a079000)
        libQt5Core.so.5 => /home/pcuser/Qt5.14.1/5.14.1/gcc_64/lib/libQt5Core.so.5 (0x00007fd42989f000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd429680000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fd4292f7000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd4290df000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd428cee000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fd42d046000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fd428ae6000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd4288e2000)
        libicuuc.so.60 => /usr/lib/x86_64-linux-gnu/libicuuc.so.60 (0x00007fd42852b000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fd42830e000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fd4280e8000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd427d4a000)
        liblz4.so.1 => /usr/lib/x86_64-linux-gnu/liblz4.so.1 (0x00007fd427b2e000)
        libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007fd427812000)
        libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fd4275ea000)
        libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007fd42735e000)
        libicui18n.so.56 => /home/pcuser/Qt5.14.1/5.14.1/gcc_64/lib/libicui18n.so.56 (0x00007fd426ec5000)
        libicuuc.so.56 => /home/pcuser/Qt5.14.1/5.14.1/gcc_64/lib/libicuuc.so.56 (0x00007fd426b0d000)
        libicudata.so.56 => /home/pcuser/Qt5.14.1/5.14.1/gcc_64/lib/libicudata.so.56 (0x00007fd42512a000)
        libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fd424f28000)
        libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fd424c11000)
        libicudata.so.60 => /usr/lib/x86_64-linux-gnu/libicudata.so.60 (0x00007fd423068000)
        libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007fd422e53000)
        libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fd422c4f000)
        libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fd422a49000)
        libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007fd422818000)
        libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007fd422562000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fd4222f0000)
        libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fd4220db000)
    
    THIS-PC:/usr/local/bin/across$ ldd ./AcrossCenter
        linux-vdso.so.1 (0x00007fffa0d28000)
        libbluetooth.so.3 => /usr/lib/x86_64-linux-gnu/libbluetooth.so.3 (0x00007fed36e74000)
        libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007fed36bf0000)
        libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007fed369d2000)
        libpci.so.3 => /lib/x86_64-linux-gnu/libpci.so.3 (0x00007fed367c5000)
        libTurboActivate.so => /usr/lib/libTurboActivate.so (0x00007fed364bf000)
        libQt5Widgets.so.5 => /home/pcuser/Qt5.14.1/5.14.1/gcc_64/lib/libQt5Widgets.so.5 (0x00007fed35c61000)
        libQt5Gui.so.5 => /home/pcuser/Qt5.14.1/5.14.1/gcc_64/lib/libQt5Gui.so.5 (0x00007fed3534e000)
        libQt5Core.so.5 => /home/pcuser/Qt5.14.1/5.14.1/gcc_64/lib/libQt5Core.so.5 (0x00007fed34b74000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fed34955000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fed345cc000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fed343b4000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fed33fc3000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fed3738c000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fed33dbb000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fed33b95000)
        liblz4.so.1 => /usr/lib/x86_64-linux-gnu/liblz4.so.1 (0x00007fed33979000)
        libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007fed3365d000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fed33440000)
        libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fed33225000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fed32e87000)
        libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007fed32bfb000)
        libicui18n.so.56 => /home/pcuser/Qt5.14.1/5.14.1/gcc_64/lib/libicui18n.so.56 (0x00007fed32762000)
        libicuuc.so.56 => /home/pcuser/Qt5.14.1/5.14.1/gcc_64/lib/libicuuc.so.56 (0x00007fed323aa000)
        libicudata.so.56 => /home/pcuser/Qt5.14.1/5.14.1/gcc_64/lib/libicudata.so.56 (0x00007fed309c7000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fed307c3000)
        libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fed305c1000)
        libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fed302aa000)
        libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007fed30095000)
        libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007fed2fe64000)
        libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007fed2fbae000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fed2f93c000)
        libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fed2f604000)
        libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fed2f3dc000)
        libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fed2f1d8000)
        libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fed2efd2000)
        libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fed2edbd000)
    Here is acrossd.service executed by systemd:
    Code:
    [Unit]
    Description=acrossd
    Requires=display-manager.service
    After=display-manager.service
    
    [Service]
    Type=simple
    Restart=always
    RestartSec=1
    ExecStart=/usr/local/bin/across/acrossd
    KillMode=process
    
    # Set ROOTCA_CERT_DIR to the directory path containing root certs.
    # The default value is:
    #   /usr/local/share/ca-certificates           for Debian/Ubuntu,
    #   /etc/pki/ca-trust/source/anchors           for RedHat/CentOS,
    #   /etc/ca-certificates/trust-source/anchors  for Arch
    # If the default value is not correct, or you are using another linux,
    # set the following environment variable.
    
    #Environment="ROOTCA_CERT_DIR=/rootca/dir/path"
    
    # Set CERT_UPDATE_CMD to the command line to update certificates cache
    # to register the cert that across will use.
    # The default value is:
    #   update-ca-certificates    for Debian/Ubuntu,
    #   update-ca-trust extract   for RedHat/CentOS,
    #   trust extract-compat      for Arch
    # If the default value is not correct, or you are using another linux,
    # set the following environment variable.
    
    #Environment="CERT_UPDATE_CMD=update cmd"
    
    [Install]
    WantedBy=graphical.target
    
    AcrossCenter registers itself as an auto-start app during login when user runs it.
    Code:
    static bool CreateAutostartDesktop(const char* path)
    {
      const int fd = open(path, O_CREAT | O_TRUNC | O_WRONLY, 0644);
      if (fd < 0)
        return false;
    
      const char* config = "[Desktop Entry]\n"
                           "Type=Application\n"
                           "Name=AcrossCenter\n"
                           "Exec=/usr/local/bin/across/AcrossCenter\n"
                           "Icon=across-Across\n"
                           "Comment=Across Center\n"
                           "X-GNOME-Autostart-enabled=true\n";
    
      const size_t len = strlen(config);
    
      posix_fallocate(fd, 0, len);
    
      const bool ok = (write(fd, config, len) == static_cast<ssize_t>(len));
      close(fd);
      return ok;
    }
    
    #define ACROSSCENTER_AUTOSTART_DESKTOP_PATH  "/etc/xdg/autostart/AcrossCenter.desktop"
    
    int main(int argc, char *argv[])
    {
      if (argc == 2 && strcmp(argv[1], "-sas") == 0)
      {
      const std::string cmd = "rm -rf " + std::string{ACROSSCENTER_AUTOSTART_DESKTOP_PATH};
      system(cmd.c_str());
      CreateAutostartDesktop(ACROSSCENTER_AUTOSTART_DESKTOP_PATH);
      system("systemctl start acrossd");
      system("systemctl enable acrossd");
      return 0;
      }
    
      struct stat sb;
      if (stat(ACROSSCENTER_AUTOSTART_DESKTOP_PATH, &sb) != 0 || !S_ISREG(sb.st_mode))
      system("pkexec /usr/local/bin/across/AcrossCenter -sas");
      if (stat(ACROSSCENTER_AUTOSTART_DESKTOP_PATH, &sb) != 0 || !S_ISREG(sb.st_mode))
      return -1;
    
    
    
    
    
      ...
    }
    I think it'd best to put all dependent libraries into /usr/local/bin/across with acrossd, AcrossCenter and openssl.
    Any suggestion of linux guru will be appreciated.
     
    Last edited: Feb 26, 2020
  14. Seungjin Lee

    Seungjin Lee Member

    Across for Linux will be available within this week along with the new versions for Windows & macOS, hopefully. At first it supports x86_64 and x86, and arm versions will be available soon. Today I ordered Rasberry Pi 3 B and 4 for arm versions. :D
     

Share This Page