Updated February 20, 2024
Proton calendar does not currently have a way to mark events as busy or free. My work around for this, is to have two calendars one for busy and another for free. The busy events are red, and the free events are green. When you create an event, you can select which calendar to place the event in.
When you share a link to your Proton's calendar, it is a link to a calendar.ics file (ics - Internet Calendaring and Scheduling). This can be read by Google Calendar, Outlook, and other email client applications. Thus, the end user must have an app to display the ics file and have his web browser set up for opening this app.
There may be advantages to this, but it is not what I wanted. I wanted it to display the calendar in a web browser without having to call another program or download anything. This is what google does.
I did find on the Internet, a way to display an ics calendars on your website [2]. Unfortunately, most of the code is in java script, which I am not familiar with. After solving two Cross-Origin Resource Sharing (CORS) issues, I did get the code to work. This first issue was using a file for a URL. This causes a CORS error [4]. You have to have an http server. You can setup a local http server using python [5]. However, this does not get you around the second issue. You have to have permission from the http(s) file server to access the files. This can only be done if you own the http(s) file server. That is, you have to modify the http file server to allow you to access to its files. This is done on Apache by placing a ".htaccess" file in the directory were the resources you want access to are located [6]. Note, to get this to work, I had to use single quotation marks and not the double quotation marks in [7]. Finally, the calendar in reference [2] is a British calendar so the first day of the week is Monday. To change the first day of the week to Sunday, in "custom_display.js" change firstDay from '1' to '0' and change locale from 'en' to 'us'.
I have now observed that my calendar does not populate events on the iPhone or the Safari browser (MacOS). Part of this problem was with the server where my website is hosted. On MacOS, Safari showed it as insecure, while Firefox showed it as secure. This was causing CORS errors. Some places in the website inspector, it was reporting a CORS error to http and other places https. I had to call my web hosting service and get them to fix the problem on their end. Well, I had to call them several times. They go the secure part fixed, but then I had to type the prefix "https://" into the address bar on my iPhone to get the calendar to show. Otherwise, it just went to my homepage. Eventually, my web server provider did get this fixed on their end. Apparent even when everything is on one host Safari and iOS require it. That is, I not sure that I needed an ".htaccess" file for Windows or Linux.
Finally, I modified index.html for responsive viewing by adding the following line:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Since, I do not own Proton nor can modify their files. I decided to download proton's calendar.ics files, and then upload them to my website. This is the work around suggested in reference [2]. Also, as suggested in reference [2], hopefully, I can set this up as a cron job. What a pain in the butt!
Step 1: I was able to create a scrip to download the ics from Proton. You cannot just use the links that Proton provides. It is a multi-step process to get a link that you can use in a bash script. First, you have open the Firefox web browser and past the link that Proton provided in the address bar. This will download the calendar.ics. Next open the firefox web browser development tool, and click on the Network tab. Then right click on what was transmitted, and select copy value, as curl. This will provide a curl command that can be used in a script file [8]. All web browsers have a way of getting a link for curl.
Step 2: To upload the updated ics files to my website, I ended up using "expect", which I had to install on my Linux system. I did not realize it in the beginning but expect is an interpreter just like bash. I tried "SSHPASS"[10], but I could not get it to work. There is a delay before the web hosting server prompts for a password. It might be possible to do this via "curl" without installing a 3rd party library such as "expect" or SSHPASS [10].
Step 3: Where I ran into a big problem was, I put the cron job in wrong the crontab (cron table). Unknown to me, my system was prompting me to accept the web hosting servers certifications. I finally discovered this by running the cron job with the -d option and redirecting the output to file. That is, the user (in my case the root) first needed to log into a server manual so that the servers public keys are stored in the users "known_hosts" file before logging in via a script. I do not know where the root's known_hosts file is located. For a regular user it is ".ssh/known_hosts".
The other possibility is that according to Proton's website, if share the calendar link with someone, they can import it into their calendar app and subscript to your calendar, which means they get updates. Is there some way to do this by code?
Be used to save all this code in a tar file on a NAS and/or on my website or on Proton's secure drive.
As of December 24, 2023 [3], the GUI Linux app for Proton VPN is not compatible with the Raspberry Pi OS.
You can use the Command Line Interface (cli) Linux app, but it is still on version 3, while the GUI is on version 4. The current cli Linux app does not have an auto-connect feature, while the GUI version does offer auto-connect.
You have manually login:
protonvpn-cli login your_user_name
You then have to connect:
protonvpn-cli connect or just c
A console window will pop up, and you have to select the server country. Then, you have to wait for almost one minute in the US, for the app to pole all of the severs in the country to determine their availability and load. Some of the servers can stream video and others cannot. After you select a sever, it will prompt you on whether to use UDP or TCP. Finally, it will connect and work as it should.
To disconnect:
protonvpn-cli disconnect or just d
To logout:
protonvpn-cli logout
To get help:
protonvpn-cli --help or -h
Proton's website says "Our new (v4) Linux doesn’t yet support a command line tool"[4]. Hopefully, this feature will be coming. According to a response in December 2023, at protonmail.uservoice.com, the cli version is planned.