Welcome! 🙂

This is both a wiki (a website editable by all) and a blog (an online diary about the stuff Alex Schroeder reads and does). If you’re a friend or relative, you might be interested in reading Life instead of this page. If you’ve come here from an RPG blog, you might want to head over to RPG. There are other similar categories to be found on the SiteMap.

Für Rollenspieler gibt es ebenfalls eine eigene RSP Kategorie.

2020-03-27 Ancient School Rules

Yesterday we had our first session for the new campaign. I’m the referee, two of my friends are players, they brought some of their kids along, one of the kids brought along their girlfriend and the girlfriend brought along her little brother. Perfect! 😃

We did a small intro of all our characters, and I asked them all to list the following:

  1. name
  2. profession (anybody can do it, but you cannot change it)
  3. a skill (anybody can do it, and you might learn new ones in-game)
  4. a special ability (you may learn new ones from teachers in-game)

I was basing my rules on Norbert G. Matausch’s Landshut Rules, the interview he did with Bob Meyer on Ancient-School Roleplaying, and very simple Dungeon World alternatives like World of Dungeons (including the German translation of World of Dungeons).

Charakters can take three hits. Light armour grant an extra hit but prevent spell casting. Heavy armour grants two extra hits but prevents spell casting, sneaking, climbing, running, and swimming. A shield grants an extra hit and also prevents spell casting, sneaking, climbing, running, and swimming.

We ended up with the following roster:

NameProfessionSkillSpecial AbilityHitsEquipment
MiaAnimal magicSmartAnimal friendship3
KinguEarth magicLegendsProtection3
Fo PiFire magicFireball3
NonuruAir magicArcherAir control3Bow and arrows
NataschaWater magicWave, icicle3
BorisWarriorSwordfightingGuard6Heavy armour, sword and shield
RothilionScoutArcherSneaking3Bow and arrows

As you can see, we have a lot of magic users! 😅

I’ll also note that Kingu’s player wanted healing and hiding, too. But it’s a bit much, I feel.

Natascha has two special abilities: the wave spell and the icicle spell. The character learned the second spell during the session.

I think that’s actually an excellent way to handle advancement: Just hand out one kind of improvement to one character per session, if appropriate based on the events during the game. I’ll see whether I can continue doing this. I don’t want to count experience points and we’d still have some sort of advancement for the characters that are playing. This is important to me as I don’t want to advance characters that aren’t playing.

I’m feeling a bit weird about having “being smart” available as a skill. Isn’t that what the players should be doing? I’ll try and handle that as a “6th sense” for dangerous situations, an early warning system.

The same is true for “legends”. The character knows many legends and prophesies. Perhaps I’ll handle that as an invitation to info dump setting material? But then again, I wouldn’t hold back with setting material the characters would know in-game, I think. Weird. Well, we’ll see how it goes.

As you can see, not all characters have their slots filled. It was hard for the kids to pick things. Specially the newbies and young ones didn’t know what to say; often their dad would speak up immediately and offer suggestions, predetermining what their kids would then say. I tried to step in whenever I saw that happening. I’d rather leave things open and let people choose later.

As for the rules, I’m using a simple 2d6 vs 2d6 system. This is unlike the Powered by the Apocalypse games: the referee still gets to roll. I mean, on average the difficulty is simply the average 7 but by rolling 2d6 it can vary wildly. If we roll the same number, I try to introduce a new fact, or change the situation in some non-obvious way. This isn’t always easy in the midst of combat, but I try.

People get a +1 or +2 to their rolls if they can bring their profession, skill or special ability to bear. During the game I didn’t always remember all of these so I fear on a few occasions players only got a +1 when they would have deserved a +2. When I ran the orcs, attacks by ordinary orcs got +0 and attacks by the boss got a +2.

If you win the opposed 2d6, you deal damage. If the difference is small, you deal one hit. If the difference is larger, let’s say three or four, you might deal two hits; more than that and it’s a “special effect” (blown back, injured, taken out, depending on the kind of attack).

In a fight of many against many I used the following rule: whoever wins the opposed roll does damage and picks the next character to attack, thus their side “keeps the initiative” and that means they get to choose who attacks whom. I think it doesn’t really make much of a difference mathematically but it definitely feels different.

At one point the characters were fighting two spectres, later they were fighting ten orcs and an orc leader. Here’s how I did it:

  1. every D&D hit die is a hit they can take
  2. determine their attack bonus (+0, +1, +2)
  3. determine special moves they could make (suck your soul... happily averted)

The notes I took during combat were super simple:

Image 1

Basically the ten ordinary orcs acted as a single ten hit monster with a +0 to attack, the two spectres acted as a single twelve hit monster with a +0 to attack (but with a scary special move if they land a lucky blow).

In this system, if the orcs “have the initiative” they just keep attacking whomever the want until they miss, and at that moment the players keep choosing who gets to attack whom until they miss. Missing automatically means that the other side hit you instead! Of course, the party tries to involve the warrior quite often and I think they picked the earth magic user just once, at the very beginning, to cast their protective spell. I think I’m OK with this; it all gets worked out somehow at the table. People will want to act, but acting also entails the possibility of getting hit.

It often was not clear that magic was super effective in a fight. In D&D, a hit with a fireball kills many weak enemies. But what about a fight with two spectres? I just handled it by appropriate descriptions with little mechanical effect. The fireball hits the spectre as the opposed 2d6 roll is much in favour of the magic user and thus the explosion is big, blowing the spectre back down the stairs into the mausoleum, giving the party a moment to regroup and decide what they’re going to do – in addition to the regular two hits it dealt. We’ll see how that develops. I think I’m OK with fighters being good at fighting and magic users being good at ranged combat and other kinds of tasks. I’ll just have to make sure that there are a lot of challenges that cannot be dealt with by simple fighting.

While we’re at it, I also ruled that being a warrior allowed you to cover an ally every now and then. So when the orcs attacked the water magic user at one point, the warrior said they wanted to cover he and I agreed. Apparently, being a bodyguard is the warrior’s special ability. 😃

As for the setting, I used Hex Describe. I did note some usability issues. I wanted both an HTML export and a Markdown export, but it wasn’t immediately obvious how to do it. When I tried to print the HTML to a PDF file, I realised I had nearly 140 pages of material! 😲

I guess I will use the PDF on my tablet while running the game, and I will paste snippets of the Markdown onto the campaign wiki map as we uncover more and more of the setting. My players probably won’t be reading it and therefore I think I can keep it all in English.


Comments on 2020-03-27 Ancient School Rules

Alex, I’m happy to read this! Ancient school rpg FTW!

Norbert Matausch 2020-03-27 14:04 UTC

Thanks for blogging about it. 👍

– Alex Schroeder 2020-03-27 16:57 UTC

Excellent, 2d6 rules!

Wanderer Bill 2020-03-27 17:00 UTC

Re: the “legends” skill: If you are already inviting your group to participate in world building (which is a great thing!), why not have the “legend” skill grant the ability to establish a small fact about the world on the go, once per day? The Burning Wheel RPG has something like that.

E.g.: DM: The bushes around you have berries in all the colors of the rainbow. Player with legend skill: I know from ancient stories that if you eat the berries in the sequence of the rainbow’s colors, you heal your wounds.

K.T. 2020-03-28 07:34 UTC

Good idea. Got to get into the habit of asking players for input. 👍

– Alex Schroeder 2020-03-28 11:23 UTC

Add Comment

2020-03-26 Jitsi and the CPU

Yesterday I ran my RPG game on the self-hosted Jitsi installation. All participants need to have the right bandwidth, of course. If you’re close to Zürich, you probably have glass fibre, so no problem. As it turns out, CPU seems to be the limiting factor. The machine I’m renting has two cores and 6GB RAM available. Here are the Munin reports:

Firewall throughput CPU usageLoad average Memory usage


Comments on 2020-03-26 Jitsi and the CPU

Other people: Jitsi Meet and the Number of Video Participants – 「… 2 virtual cores and 4GB of memory … both CPUs ran at around 70% with 10 clients and memory use was around 1.4 GBs at the beginning and 800 MB a little while later when everyone had joined and settled in … I was far away from saturating the CPU with 10 simultaneous video streams in the conference.」 – Nice! 🙂

Other software: Big Blue Button: Requirements – 「… we recommend starting with a ‘clean’ Ubuntu 16.04 64-bit server dedicated for BigBlueButton. … 4 GB of memory with swap enabled (8 GB of memory is better) … 4 CPU cores (8 is better)」 – but as noted I only have 2 GB of memory, only 2 CPU cores, it’s not a dedicated server, and it’s Debian Buster, not Ubuntu 16. Oh well!

– Alex Schroeder 2020-03-28 11:54 UTC

Had another session yesterday and when the conference ended it seemed to me that some of the other services on this machine had been killed. Out of memory? I don’t think so. I need to investigate. Perhaps the response times for requests had grown so long that Monit decided the services were down and started restarting them?

– Alex Schroeder 2020-03-29 10:06 UTC

Add Comment

2020-03-25 GoodReader EULA, again

Back in 2019, was unhappy with the GoodReader EULA. Apparently it is time to be unhappy again. I wrote another email.

To: support@goodreader.com
Subject: Unhappy with the new EULA

Hello Team GoodReader

I’m writing to you because I was shown the new EULA when I tried to start GoodReader today. I started skimming it and was disappointed to read section 2:

​2. Consent to Use of Data: You agree that Licensor may collect and use some information about you, your device, the Licensed Application’s state, and/or Licensed Application usage stats, analytics and telemetry. Some of the information may be collected with the help of 3rd-party analytics software including but not limited to Google Firebase and Google Analytics. More detailed information about the type of information we collect can be found in the Licensor’s Privacy Policy located on the Licensor’s website: http://goodreader.com.

I don’t want to agree to this. I don’t think a PDF reader needs this information; I dislike the thought of any 3rd-party getting this information; I very much dislike the thought of Google in particular getting this information.

I want to opt out of this. What are my options?

I remember sending you a similar email back in February 2019. Back then you wrote:

We assure you that the only way we gather data is through voluntary submissions from GoodReader users via e-mail, which the user can choose not to send if they prefer not to. The EULA ensures we have your permission to use the data that you choose to send to us.

The GoodReader app does not, and cannot, automatically gather any information about you, your data, or the way you use GoodReader.

Back then, you also wrote about user privacy:

Additionally, please read the full About GoodReader description here: https://www.goodreader.com/index.html

As stated: “Above all, we value your privacy: GoodReader’s commitment is to never monitor users or activity. We aim to be the most privacy focused iOS productivity tool in the market. We never ask for your personal information and there are no usernames or profiles. Use the tool at your leisure with ZERO monitoring.”

I would love to hear that all of this is still true. I hope that the problem is simply a legal team that is tone deaf when it comes to privacy concerns in a day and age of Ed Snowden and universal spying and surveillance capitalism. A good PDF reader doesn’t have to be like that.

Finally, last time you wrote:

It seems that the wording has caused some confusion and anxiety for many users. We are going to add more clarification to the EULA in the next update.

I’m still hoping that you do.

Regards from Switzerland
Alex Schroeder


Add Comment

2020-03-25 A new campaign

I’m going to start a new campaign with two friends. It’s going to be a remote game. I used to decline such games because I had enough face to face games if I wanted to. But now that the Corona virus pandemic is upon us, there’s not much difference: both of my games are online. DM Peter runs his D&D 5E game via Skype and Roll20, and I run my games via a self-hosted Jitsi server.

So, a new game. They said they wanted something “simple”, like Labyrinth Lord (or possibly my house rules, Halberds & Helmets, of course). They also mentioned the fact that they might want to have their kids join every now and then.

I’m faced with the same problem I’ve had two or three times before: one kid wants to play an elf, or a unicorn. An elf, I say – an elf from The Lord of the Rings? Peter Pan? Elfquest? I ask him to ask the kid. The answer I get back is Mia and me. Wow. I had no idea.

Is this the new party?

Image 1

And here I was, ready to go all “Kill 6 Billion Demons” on my two friends...

This is the other party:

Image 2

But sending these images back and forth gave me an idea. How about I stick to the indie games I like: Dungeon World and friends. Something like the Landshut Rules, ancient school role-playing!

So I decided to offload a bit of the setting creation to my players, and to facilitate the finding of a common “language” and style by asking my players for more pictures, some location names, some names for the opposition, stuff like that. And I think that will be interesting. I’ll draw a little map and add those names, add the opposition, think of some interactions, and I’ll let my self be inspired by the media they like (apparently, travel and adventure blogs) and their kids like (looks like Frozen and possibly Maleficient), and the media I like (some lurid Troika!, Silent Titans, and Kill 6 Billion Demons – just looking at the visuals as I haven’t really read any of them).

Something simple like:

  • every character has one special ability, a skill, and a profession
  • use opposed 2d6 rolls, with bonuses depending on the above
  • if required, everybody has three hits; armour grants one, two or three extra hits
  • bonuses are declared by the referee, possibly followed by a short negotiation

We’ll see how it goes. 😀


Comments on 2020-03-25 A new campaign

Sounds like a nice experiment. Reading Norbert’s blog has made me question/unlearn and a lot of my own assumptions about RPG rules/systems, and the new insights have largely been validated in play-testing (at least in terms of how I like to GM). In particular his Play worlds, not rules series was an eye-opener for me when I read it and I think time is ripe for me to read it again.

– Björn Buckwalter 2020-03-26 09:21 UTC

Add Comment

2020-03-24 North Seymour

When we landed in the Galápagos at Baltra airport, we were brought onto our ship and taken to the first island: North Seymour. It’s flat and dry and it has land iguanas, blue-footed boobies and frigatebirds, and sea lions. Here are some pictures:

Related links:


Add Comment

2020-03-21 Quito

A few weeks ago, before COVID-19 hit us over the head, Claudia and I flew to Quito, Ecuador, and stayed there for a few days before continuing on to the Galápagos. As we all have a bit of free time right now, I was able to create a little album. 🙂


Comments on 2020-03-21 Quito

For my own reference: sitelen-mute -c txt -f --title "Quito 2020" --description "On our way to the Galápagos we stopped for a few days in Quito, Ecuador." --url https://alexschroeder.ch/gallery/2020-quito/ Quito 2020-quito && rsync --progress --recursive -e "ssh -p 882" 2020-quito alexschroeder.ch:alexschroeder.ch/gallery/

– Alex Schroeder 2020-03-21 15:57 UTC

Add Comment

2020-03-21 Der Browser und Jitsi

Hier meine Notizen für die Rollenspielrunde, welche ich via Jitsi Videokonferenz leiten will (hier). Von dort gibt Links für Mobiltelefone und Tablets. Wer Jitsi allerdings auf dem Browser verwenden will, muss die Berechtigungsfragen richtig beantworten!

Wichtig: Mikrophone und Kopfhörer zuerst einstecken; im Notfall danach den Browser neu starten!

Nun besucht man die Chat Seite und wählt den Suedsee Raum:


Hier muss man nun Kamera und Mikrophon freigeben. Wie oben gesagt, wenn man erst jetzt eine separate Kamera, Kopfhörer oder ein separates Mikrophon einsteckt, dann tauchen diese Geräte unter Umständen nicht in der Liste auf.


Wenn alles funktioniert hat, sieht man nun ein Bild von sich selber, und der Browser zeigt eine Warnung, dass Kamera und Mikrophon im Moment verwendet werden:


Idealerweise sieht das so aus:

Ziel erreicht!

Unten rechts bei den drei Punkten → ⋮ gibt es ein Menü mit den Einstellungen, wo man nochmal Kamera und Mikrophon auswählen kann, falls man mehrere davon angeschlossen hat. 🙂

Jitsi Settings


Bei den Einstellung kann man nach “Kamera” und “Mikrophon” suchen.


Wenn man die anklickt, sollte man sehen, dass https://chat.campaignwiki.org auf Kamera und Mikrophon zugreifen dürfen. Wenn die Automatik also nicht funktioniert hat, kann man das hier manuell nachholen.


Wenn man die Freigabe nochmal wiederholen will, kann man https://chat.campaignwiki.org hier auch wieder entfernen und das Ganze nochmal versuchen.

Wenn man nicht nach den nötigen Berechtigungen für Kamera und Mikrophon gefragt wird, dann kann das daran liegen, dass bei den Einstellungen die Anfrage nach den nötigen Berechtigungen generell verboten wurde. In diesem Fall muss man das halt selber eintragen. 🙂

Viel Erfolg!

Und sonst?

Ich will so wenig wie möglich ändern:

  1. es gibt von mir kaum Karten, Battlemaps, oder sonstiges Material von mir, deswegen brauchen wir keine Applikation, wo man gemeinsam zeichnen kann. Sollte es doch nötig verwenden, verwenden wir dieses Aggie.io Whiteboard
  2. ich kontrolliere die Würfel selten: im Notfall kann man immer noch mit der Webcam drauf zeigen
  3. alle wichtigen Texte und Charakterblätter bleiben weiterhin auf unserer Wiki
  4. falls wir Probleme mit der Tonqualität haben, können wir ja die Kameras wieder abschalten
  5. je nach verwendeten Geräten dürfte es ein starkes Echo geben: in diesem Fall bitte Kopfhörer verwenden; ich bin mir nicht sicher, wie das funktioniert mit zwei Leuten im gleichen Zimmer – ich vermute, das funktioniert einfach nicht (können wir aber gerne ausprobieren)
  6. auf Jitsi gibt es auch einen Chat, sollte aber nicht nötig sein (oder Threema auf dem Telefon verwenden)
  7. mit Jitsi kann man auch den Bildschirm teilen, aber am Tisch braucht es das ja auch nicht...

Ich hoffe, das passt! 🙂

Gerne vorher alles schon mal probieren. Da es keine Anmeldung gibt, kann sich mit dem Telefon verbinden (Kopfhörer nicht vergessen), und dann im Browser das Gleiche (ebenfalls Kopfhörer nicht vergessen), und etwas herum albern, dann findet man schon raus wie alles geht.


Comments on 2020-03-21 Der Browser und Jitsi

Alternative Server:

– Alex Schroeder 2020-03-21 21:45 UTC

Add Comment

2020-03-20 Skype and Roll20

OK, so today I was a player in DM Peter’s game and due to the COVID-19 problem we can no longer meet in person. Peter picked Roll20 and Skype!

We started half an hour early, finding our old Skype accounts; I realized that I didn’t want to install a Microsoft RPM on my GNU/Linux machine; Skype-for-Web complained about my browser (Firefox 68.6.0esr); the phone worked (until it eventually ran out of battery and I had to switch from the iPhone to the iPad, quickly installing the app mid-game...) – in short, the technology was a drag, but eventually it worked.

Roll20 was also tricky to start: Peter wanted to play background music and it was too quiet for some and to loud for others until we discovered that there is a way to change it; we found the settings to make sure no video and audio got sent via Roll20 as we were using Skype; Peter created our characters and we played with the settings allowing us to display only the names for the characters (as we had video elsewhere); how to drag characters onto the map took a moment; how to point to locations took a moment; switching from moving tokens to measuring distances and back took a moment – and I’m sure Peter spent quite some time preparing suitable backgrounds and pictures for the game. During the game, some people figured out how to create macros (mine) and others didn’t, which was weird.

As we played, we all ended up putting on headphones. I used the regular Apple headphones with the integrated microphone and it worked very well.

Peter never got his Skype camera to work, so it was weird to have no DM face: all the players were visible, but the DM was “in our heads”. An interesting experience!

But all in all, it worked. We can work with this. It felt personal. We managed to not talk over each other too often. 👏

But what about Jitsi? Yes, what about the Video Conference server I installed recently? When the game was over, we talked for a bit and I asked them to give it a try, on their laptops. Sadly, the experience wasn’t too smooth:

  1. it worked fine for Peter, including his camera which hadn’t worked with Skype!
  2. the Mac user had to switch from Safari to Firefox
  3. another user had not managed to give the right permission at the very beginning and had to restart the browser in order to get another chance at granting the necessary permissions
  4. another user simply didn’t manage to get it right
  5. We all agreed that it was serviceable but we also felt that the audio quality was slightly worse than Skype

All in all, it was not a great experience. I understand the problem of permissions, and I understand the problems of apps being able to track you where a browser perhaps cannot – but clearly the user experience of these players wasn’t great and we’ll be using Skype and Roll20 again in a week.

What people really liked about Roll20 – and this is something Jitsi alone does not provide, so we’d still have to use some other application for it:

  • the 3D virtual dice for all to see which is something we all liked a lot
  • people liked the background music but I didn’t pay much attention to it
  • people liked the battlemap but I would have preferred to play without it

Roll20 and Skype it is!


Comments on 2020-03-20 Skype and Roll20

I am happy to help troubleshoot the jitsi setup further if you want. UTC -5 over here. Just say the word. I will DM you my (Signal) number in Mastodon.

...at this point we should have done that anyway. 😝

PresGas 2020-03-21 18:22 UTC


– Alex Schroeder 2020-03-21 19:15 UTC

As for Roll20, I’ll note that I hate the user interface. So much stuff to do. So many settings to tweak. It’s slow. I can’t upload any images. Perhaps it’s the browser that’s no longer supported? I don’t know. That makes it hard to set up stuff. I need to set up characters one by one, and assign them to players. I immediately picture all of us trying to figure out how dice rolling, macros, avatar uploads, and so on will work. And thus half an hour is spent dealing with the technology instead of playing the game.


For my own games, I still think Jitsi would be nicer because it’s simple.

Essentially, everything except for audio chat is optional. A camera is cool but when I think back I don’t think I looked at the camera all too often. The Burning Wheel game I played such a long time ago used no camera. I’m still hoping that we can go about rolling our own dice. Just tell us what you rolled. Or point the camera at it! 🙂

That’s how I plan to start, in any case.

– Alex Schroeder 2020-03-21 20:17 UTC

I used it today with @PresGas and it worked fine over the Atlantic... But we did have a lot of issues:

  • I had not realized that my laptop microphone hat its input level set to practically zero so he couldn’t hear me
  • Once I had that fixed all he could hear was static
  • When we tried a different server, audio worked but video did not
  • I decided to try my external microphone, the browser and Jitsi didn’t know about it and couldn’t access it; I had to restart Firefox such that I was asked for permission to the microphone again and that’s where I could pick the external microphone
  • When video didn’t work I realized that my webcam was listed twice and this permission dialogue is what allowed me to pick the “other” same camera and then it worked

All of this makes me think that it is super important to only grant permissions to the microphone and camera temporarily. That way you will always get asked for permission the next time you use it and you will therefore always be able to pick the correct device.

Later the same day I tried to use Jitsi with the in-laws and apparently their Internet Explorer or Edge or whatever they were using is not supported. So we used FaceTime to call each other and just clicked through the gallery in parallel. How to send them the right link, on the phone or by mail, and do they manage to open the link in their desktop mail client and not their phone client, or do they have to copy the link manually from their phone and type it into their desktop browser address bar... Truly, the populace in general is not computer literate! Anyway... FaceTime worked fine.

– Alex Schroeder 2020-03-22 16:40 UTC

It was great getting together with you to look things over!! We are about to game ourselves (over Zoom with our University licensing). I think when I take over as GM, we are going to try Jitsi again.

I would still blame IE/Edge for most of that. Remember the days when people only coded websites TO IE only? Now it is the one out in the cold!!


PresGas 2020-03-22 16:52 UTC

Had my Jitsi test with the RPG group and it went well. One player has a desktop with a loud ventilator; he’s going to use his phone; we’re using the laptop at one end of the table and an external microphone between me and Claudia (the one I bought for my podcast a while ago) – that’s far enough from the laptop to not cause an echo, and far enough for the camera to get both of us; the other couple is using a conferencing microphone and they’re both sitting in front of the same laptop, no problem.

I think this is going to work! 😀

– Alex Schroeder 2020-03-22 18:58 UTC

Yea!! I am so glad it is working in your favor. Your desktop person may have the machine on the same level as the rest of the gear (perhaps on top of the desk?).

I would suggest that they move it to the floor if that will help and they can do so.

PresGas 2020-03-22 19:31 UTC

I’ve been using Discord + Roll20 for over a year and it’s worked great for audio and whiteboarding/maps.

Recently, I’ve been using awwapp.com for a free whiteboard when I didn’t need all the bells/whistles of Roll20.

I don’t use the video aspect, but if/when I do, I use Hangouts.

Anonymous 2020-03-22 20:18 UTC

Used Roll20 and Skype again. Roll20 on the Laptop, Skype on the iPad, and it worked quite well. Apparently you can only subdivide the Skype window into four panes, so when we had five and six people in our call, you couldn’t really see all of us at the same time. It worked well enough, though.

– Alex Schroeder 2020-03-23 22:55 UTC

I had mostly good luck with Jitsi in recent days. Using Chrome (or Chromium) seems to be the easiest path, and it lets the user change permissions and input devices in a running call by clicking the info icon at the left of the URL bar.

Paul Gorman 2020-03-28 18:45 UTC

Thanks, Paul. I’ll pass it on! 🙂

– Alex Schroeder 2020-03-28 18:53 UTC

Add Comment

2020-03-18 Selfhosting Jitsi

I’m trying to self-host Jitsi (”multi-platform open-source video conferencing”).

  1. follow the instructions and use their Ubuntu/Debian repository
  2. I already have the subdomain chat.campaignwiki.org setup with Gandi
  3. add chat.campaignwiki.org to the existing Campaign Wiki domain names in /etc/dehydrated/domains.txt such that Let’s Encrypt will pick it up
  4. edit the Apache config file they generate and comment their settings for SSLProtocol, SSLCipherSuite and SSLHonorCipherOrder, preferring my own
  5. enable the site using a2ensite and restart Apache gracefully using systemctl reload apache2


  1. chat.campaignwiki.org seems to work!
  2. got to Firefox preferences and search for Microphone and Camera and make sure to allow requests asking to access them (which I have disabled by default)
  3. on the phone, install the Jitsi Meet app (not sure why the browser isn’t good enough on the phone?)
  4. use the test room to test it...

I get the rooms listed, but I am immediately disconnected when accessing it on the phone. Not good!

I also get disconnected every now and then when using the website on my laptop. Hm.

OK, opening two private browsing windows and connecting to a channel on the official site seems to work. At least I get two copies of my camera showing video and I can chat with myself. It also works with the app on the phone. Thus, this is not an app or browser problem.

Back to my own installation. Let’s check the logs at /var/log/jitsi/jicofo.log. Some things to note after a restart:

  1. “Lonely participants will be “terminated” after 20000 milliseconds” → that would explain my automatic disconnects on the laptop after a bit
  2. the XMPP component says “This server does not serve auth.campaignwiki.org” but I think that’s OK?
  3. I also see references to jitsi-videobridge.campaignwiki.org and focus.campaignwiki.org but surely this cannot work?
  4. there are other Java exceptions, too; these look concerning: “ClassNotFoundException: javax.activation.DataSource”, “ClassNotFoundException: javax.xml.bind.PropertyException”, and “ClassNotFoundException: javax.xml.bind.Unmarshaller”

I think I need to redo my setup. Perhaps the domain name setup was a problem? I remember providing the wrong domain name at some point and then just fixing it in the Apache site config.

  1. apt purge jigasi jitsi-meet jitsi-meet-web-config jitsi-meet-prosody jitsi-meet-web jicofo jitsi-videobridge
  2. apt install -y jitsi-meet
  3. domain to use: chat.campaignwiki.org
  4. use my own certificates: /var/lib/dehydrated/certs/campaignwiki.org/privkey.pem and /var/lib/dehydrated/certs/campaignwiki.org/cert.pem

The differences in the Apache site setup:

--- /etc/apache2/sites-available/chat.campaignwiki.org.conf
+++ /etc/apache2/sites-available/600-chat.campaignwiki.org.conf
@@ -11,13 +11,14 @@
   ServerName chat.campaignwiki.org
-  SSLProtocol TLSv1 TLSv1.1 TLSv1.2
+  # SSLProtocol TLSv1 TLSv1.1 TLSv1.2
   SSLEngine on
   SSLProxyEngine on
-  SSLCertificateFile /var/lib/dehydrated/certs/campaignwiki.org/cert.pem
-  SSLCertificateKeyFile /var/lib/dehydrated/certs/campaignwiki.org/privkey.pem
-  SSLHonorCipherOrder on
+  SSLCertificateFile      /var/lib/dehydrated/certs/campaignwiki.org/cert.pem
+  SSLCertificateKeyFile   /var/lib/dehydrated/certs/campaignwiki.org/privkey.pem
+  SSLCertificateChainFile /var/lib/dehydrated/certs/campaignwiki.org/chain.pem
+  # SSLHonorCipherOrder on
   Header set Strict-Transport-Security "max-age=31536000"
   DocumentRoot "/usr/share/jitsi-meet"

Diff finished.  Wed Mar 18 10:33:44 2020

I still get the same problem:

  1. https://chat.campaignwiki.org/Test loads
  2. I see the UI
  3. I am reconnected after a few seconds

Image 1

Trying to see whether the hostnames make more sense, now:

# grep campaignwiki /etc/prosody/conf.d/chat.campaignwiki.org.cfg.lua 
VirtualHost "chat.campaignwiki.org"
                key = "/etc/prosody/certs/chat.campaignwiki.org.key";
                certificate = "/etc/prosody/certs/chat.campaignwiki.org.crt";
Component "conference.chat.campaignwiki.org" "muc"
admins = { "focus@auth.chat.campaignwiki.org" }
Component "jitsi-videobridge.chat.campaignwiki.org"
VirtualHost "auth.chat.campaignwiki.org"
        key = "/etc/prosody/certs/auth.chat.campaignwiki.org.key";
        certificate = "/etc/prosody/certs/auth.chat.campaignwiki.org.crt";
Component "focus.chat.campaignwiki.org"

These subdomains make my head hurt. How can this work? I have added the four of them to my /etc/hosts file, but no effect. Not surprisingly, it turns out that these need to be “real” domains, reachable from the outside. Continue reading the comments...


Comments on 2020-03-18 Selfhosting Jitsi

What domain do you have in /etc/jitsi/meet/*-config.js ? Search the wrong domain with ack --js /etc or something. Frankly, it might be faster to redo the install from scratch on a new machine: it shouldn’t take more than 5-10 min, if you have all the ports open and there’s no other webserver installed on the same machine.

– Federico 2020-03-18 11:02 UTC

I have already redone the config once, so I don’t mind doing it again, but I need to understand what went wrong because the problem seems to be unchanged.

I checked the config file:

# grep campaignwiki /etc/jitsi/meet/chat.campaignwiki.org-config.js 
        domain: 'campaignwiki.org',
        // authdomain: 'campaignwiki.org',
        // jirecon: 'jirecon.campaignwiki.org',
        // call_control: 'callcontrol.campaignwiki.org',
        // focus: 'focus.campaignwiki.org',
        muc: 'conference.campaignwiki.org'
    bosh: '//campaignwiki.org/http-bind',
    // focusUserJid: 'focus@auth.campaignwiki.org',
    //     // 'https://campaignwiki.org/static/oauth.html'
    //          'https://campaignwiki.org/subfolder/static/oauth.html'

This is strange, because the “chat” subdomain seems to be missing. I’ll add that and try again:

--- /etc/jitsi/meet/chat.campaignwiki.org-config.js~
+++ /etc/jitsi/meet/chat.campaignwiki.org-config.js
@@ -6,7 +6,7 @@
     hosts: {
         // XMPP domain.
-        domain: 'campaignwiki.org',
+        domain: 'chat.campaignwiki.org',
         // When using authentication, domain for guest users.
         // anonymousdomain: 'guest.example.com',
@@ -28,7 +28,7 @@
     // BOSH URL. FIXME: use XEP-0156 to discover it.
-    bosh: '//campaignwiki.org/http-bind',
+    bosh: '//chat.campaignwiki.org/http-bind',
     // The name of client node advertised in XEP-0115 'c' stanza
     clientNode: 'http://jitsi.org/jitsimeet',

Diff finished.  Wed Mar 18 12:26:23 2020

Sadly, that doesn’t work either. Now I’m getting an “Unfortunately, something went wrong” error.

– Alex Schroeder 2020-03-18 11:20 UTC

OK, next attempt. I found this in the Juno Host docs:

Jitsi requires you create additionals domains in your DNS and in your YunoHost

  • auth.jitsi.domain.tld
  • conference.jitsi.domain.tld
  • jitsi-videobridge.jitsi.domain.tld
  • focus.jitsi.domain.tld

So I created them:

chat 10800 IN A
chat 10800 IN AAAA 2a02:418:6a04:178:209:50:237:1
chat.auth 10800 IN A
chat.auth 10800 IN AAAA 2a02:418:6a04:178:209:50:237:1
chat.conference 10800 IN A
chat.conference 10800 IN AAAA 2a02:418:6a04:178:209:50:237:1
chat.focus 10800 IN A
chat.focus 10800 IN AAAA 2a02:418:6a04:178:209:50:237:1
chat.jitsi-videobridge 10800 IN A
chat.jitsi-videobridge 10800 IN AAAA 2a02:418:6a04:178:209:50:237:1

And the config file:

--- /etc/jitsi/meet/chat.campaignwiki.org-config.js~
+++ /etc/jitsi/meet/chat.campaignwiki.org-config.js
@@ -6,7 +6,7 @@
     hosts: {
         // XMPP domain.
-        domain: 'campaignwiki.org',
+        domain: 'chat.campaignwiki.org',
         // When using authentication, domain for guest users.
         // anonymousdomain: 'guest.example.com',
@@ -24,11 +24,11 @@
         // focus: 'focus.campaignwiki.org',
         // XMPP MUC domain. FIXME: use XEP-0030 to discover it.
-        muc: 'conference.campaignwiki.org'
+        muc: 'conference.chat.campaignwiki.org'
     // BOSH URL. FIXME: use XEP-0156 to discover it.
-    bosh: '//campaignwiki.org/http-bind',
+    bosh: '//chat.campaignwiki.org/http-bind',
     // The name of client node advertised in XEP-0115 'c' stanza
     clientNode: 'http://jitsi.org/jitsimeet',

Diff finished.  Wed Mar 18 21:12:06 2020

And now a single user can connect! I can connect to a chatroom and I see my video. No constant reconnects. I also had to restart Prosody with service prosody reload.

The only problem now is that whenever I connect to the same chatroom from a different private window or the phone, both sessions are terminated.

Perhaps this is still related to certificates? I think the one I have is only good for campaignwiki.org, www.campaignwiki.org, and chat.campaignwiki.org – but I need more subdomains, apparently.

– Alex Schroeder 2020-03-18 20:21 UTC

I decided to use the prosody cert calls mentioned in the Configure Prosody section. (Now I remember how I failed to set it up a while ago.)


prosodyctl cert generate chat.campaignwiki.org
prosodyctl cert generate auth.chat.campaignwiki.org
systemctl restart prosody

OK... I can now connect with both browser and phone, and we see each other in the channel, but both believe the other is muted and has no video!


– Alex Schroeder 2020-03-18 20:32 UTC

OK, /var/log/jitsi/jicofo.log has a SEVERE message: “... XMPP reconnection failed: ... SSLHandshakeException: PKIX path validation failed: ... CertPathValidatorException: signature check failed”

Let’s try this:

ln -sf /var/lib/prosody/auth.chat.campaignwiki.org.crt /usr/local/share/ca-certificates/
update-ca-certificates -f
systemctl restart prosody
systemctl restart jicofo
systemctl restart jitsi-videobridge

– Alex Schroeder 2020-03-18 20:48 UTC

Oh wow, it works! 😀

– Alex Schroeder 2020-03-18 20:50 UTC

If you’re using the app on your phone, note the trackers!

– Alex Schroeder 2020-03-18 21:21 UTC

Oh, cool:

– Alex Schroeder 2020-03-19 11:51 UTC

Some stuff is still not correct. Jitsi should give me a working XMPP server, too, as far as I understand it. Right now, however, Bitlbee gives me an error: “Login error: Certificate verification problem 0x14: certificate hasn’t got a known issuer”. That isn’t too surprising, considering that I self-generated certificates and added one of them to the local trust db. I guess the answer is to generate a certificate using Let’s Encrypt for all the domains in question.

I edited /etc/dehydrated/domains.txt and now I’m listing these:

campaignwiki.org www.campaignwiki.org chat.campaignwiki.org auth.chat.campaignwiki.org

When I run dehydrated -c I get an error:

 + Responding to challenge for auth.chat.campaignwiki.org authorization...
 + Hook: Nothing to do...
 + Cleaning challenge tokens...
 + Hook: Nothing to do...
 + Challenge validation has failed :(
ERROR: Challenge is invalid! (returned: invalid) (result: {
  "type": "http-01",
  "status": "invalid",
  "error": {
    "type": "urn:ietf:params:acme:error:dns",
    "detail": "DNS problem: NXDOMAIN looking up A for auth.chat.campaignwiki.org - check that a DNS record exists for this domain",
    "status": 400
  "url": "https://acme-v02.api.letsencrypt.org/acme/chall-v3/3446546602/NNlp-g",
  "token": "l7Q3SpNFqQgZT3lnVVEPps0DvN1NkoyfG5rhC_dEMwY"

When I run dig on campaignwiki.org, www.campaignwiki.org, chat.campaignwiki.org and auth.chat.campaignwiki.org I do get some output but it doesn’t look correct:

;auth.chat.campaignwiki.org.	IN	A

campaignwiki.org.	2776	IN	SOA	ns1.gandi.net. hostmaster.gandi.net. 1584556785 10800 3600 604800 10800

Compare with the following:

;chat.campaignwiki.org.		IN	A

chat.campaignwiki.org.	3216	IN	A

So the answer section doesn’t include the subdomain. How strange.


;chat.auth.campaignwiki.org.	IN	A

chat.auth.campaignwiki.org. 3600 IN	A

I think I got it backwards! 😟

Let’s try the following in my DNS setup:

chat 10800 IN A
chat 10800 IN AAAA 2a02:418:6a04:178:209:50:237:1
auth.chat 10800 IN A
auth.chat 10800 IN AAAA 2a02:418:6a04:178:209:50:237:1
conference.chat 10800 IN A
conference.chat 10800 IN AAAA 2a02:418:6a04:178:209:50:237:1
focus.chat 10800 IN A
focus.chat 10800 IN AAAA 2a02:418:6a04:178:209:50:237:1
jitsi-videobridge.chat 10800 IN A
jitsi-videobridge.chat 10800 IN AAAA 2a02:418:6a04:178:209:50:237:1

– Alex Schroeder 2020-03-19 12:34 UTC

OK, fixing stuff, now that the subdomains and subsubdoains 🙂 are ready:

rm /usr/local/share/ca-certificates/auth.chat.campaignwiki.org.crt
rm /etc/prosody/certs/*campaign*
for subdomain in chat auth.chat focus.chat jitsi-videobridge.chat conference.chat; do
    cat /var/lib/dehydrated/certs/campaignwiki.org/fullchain.pem > /etc/prosody/certs/$subdomain.campaignwiki.org.crt
    cat /var/lib/dehydrated/certs/campaignwiki.org/privkey.pem > /etc/prosody/certs/$subdomain.campaignwiki.org.key
chown prosody.prosody /etc/prosody/certs/*campaign*
update-ca-certificates -f
systemctl restart prosody
systemctl restart jicofo
systemctl restart jitsi-videobridge

So now I’m expecting the following:

# ls -l /etc/prosody/certs
total 40
-rw-r--r-- 1 prosody prosody 4006 Mar 19 22:10 auth.chat.campaignwiki.org.crt
-rw-r--r-- 1 prosody prosody 3243 Mar 19 22:10 auth.chat.campaignwiki.org.key
-rw-r--r-- 1 prosody prosody 4006 Mar 19 22:10 chat.campaignwiki.org.crt
-rw-r--r-- 1 prosody prosody 3243 Mar 19 22:10 chat.campaignwiki.org.key
-rw-r--r-- 1 prosody prosody 4006 Mar 19 22:10 conference.chat.campaignwiki.org.crt
-rw-r--r-- 1 prosody prosody 3243 Mar 19 22:10 conference.chat.campaignwiki.org.key
-rw-r--r-- 1 prosody prosody 4006 Mar 19 22:10 focus.chat.campaignwiki.org.crt
-rw-r--r-- 1 prosody prosody 3243 Mar 19 22:10 focus.chat.campaignwiki.org.key
-rw-r--r-- 1 prosody prosody 4006 Mar 19 22:10 jitsi-videobridge.chat.campaignwiki.org.crt
-rw-r--r-- 1 prosody prosody 3243 Mar 19 22:10 jitsi-videobridge.chat.campaignwiki.org.key
lrwxrwxrwx 1 root    root      37 Jan  9  2019 localhost.crt -> ../../ssl/certs/ssl-cert-snakeoil.pem
lrwxrwxrwx 1 root    root      39 Jan  9  2019 localhost.key -> ../../ssl/private/ssl-cert-snakeoil.key

As you can see, the various certificates are all identical because I’ve setup dehydrated such that the one certificate works for all these names. This differs from the official Let's Encrypt and Prosody documentation!

Once these certificates are in place and have the correct owners, I can edit my hook.sh for dehydrated:

# cat /var/lib/dehydrated/hook.sh
if [ ${1} == "deploy_cert" ]; then
    echo " + Hook: Reloading Apache for ${2}..."
    service apache2 reload
    if [ ${2} == "campaignwiki.org" ]; then
	echo " + Hook: Regenerating prosody's files..."
	# 3 is privkey, 4 is cert, 5 is fullchain, 6 is chain, 7 is timestamp
	# use cat to preserve permissions and ownership
	for subdomain in chat auth.chat focus.chat jitsi-videobridge.chat conference.chat; do
	    cat ${5} > /etc/prosody/certs/$subdomain.campaignwiki.org.crt
	    cat ${3} > /etc/prosody/certs/$subdomain.campaignwiki.org.key
	service prosody reload
    if [ ${2} == "alexschroeder.ch" ]; then
	echo " + Hook: Regenerating monit's .pem file..."
	# 3 is privkey, 4 is cert, 5 is fullchain, 6 is chain, 7 is timestamp
	# use cat to preserve permissions and ownership
	cat ${5} ${3} > /etc/ssl/localcerts/alexschroeder.ch.all.pem
	service monit reload
    echo " + Hook: Nothing to do..."

Everything still seems to work. 🙂

– Alex Schroeder 2020-03-19 21:19 UTC

When I check the XMPP server with Bitlbee, however: “BitlBee does not support any of the offered SASL authentication schemes: ANONYMOUS” 😟

– Alex Schroeder 2020-03-19 21:21 UTC

Actually, now that I’ve talked to EionRobb on the #bitlbee channel, I think I understand.

  1. I need anonymous access to XMPP for Jitsi to work for anonymous users
  2. Internally, they get assigned random ids, but that doesn’t bother them because they access Jitsi via a URL that gives them a chat room and so whoever is there knew the URL and is your “friend” so you trust them and the alias they give themselves
  3. But from IRC via Bitlbee or via another XMPP client, that doesn’t make sense: you have an id first, like kensanata@pluspora.com, and then you send messages to other people whose id you trust

So, all of this wasn’t actually necessary! 😭

Not sure what to do now. Would a self-signed certificate for auth.chat.campaignwiki.org be enough?


– Alex Schroeder 2020-03-19 21:44 UTC

OK, let’s figure out how this works. Prosody has uses this config file for the Jitsi stuff: /etc/prosody/conf.d/chat.campaignwiki.org.cfg.lua. From a copy in the global config file /etc/prosody/prosody.cfg.lua:

-- Certificates
-- Every virtual host and component needs a certificate so that clients and
-- servers can securely verify its identity. Prosody will automatically load
-- certificates/keys from the directory specified here.

OK, so which ones get listed?

  1. virtual server localhost (really?)
  2. virtual server chat.campaignwiki.org (with a SSL section pointing to /etc/prosody/certs)
  3. component conference.chat.campaignwiki.org (no SSL section)
  4. component jitsi-videobridge.chat.campaignwiki.org (no SSL section)
  5. virtual server auth.chat.campaignwiki.org (with a SSL section pointing to /etc/prosody/certs)
  6. component focus.chat.campaignwiki.org (no SSL section)

Hm. So I’m guessing only the virtual servers with SSL section actually need them. Instead of modifying the files too much, I will simply remove the unnecessary copies of the certificates and not add any self-signed certs back.

And for Monit:

check process prosody with pidfile /var/run/prosody/prosody.pid
    start program = "/bin/systemctl start prosody"
    stop program = "/bin/systemctl stop prosody"
    restart program = "/bin/systemctl restart prosody"
    if totalmem > 500 MB for 5 cycles then restart
    if 3 restarts within 15 cycles then stop

check process jicofo with pidfile /var/run/jicofo.pid
    start program = "/bin/systemctl start jicofo"
    stop program = "/bin/systemctl stop jicofo"
    restart program = "/bin/systemctl restart jicofo"
    if totalmem > 500 MB for 5 cycles then restart
    if 3 restarts within 15 cycles then stop

check process jitsi-videobridge with pidfile /var/run/jitsi-videobridge/jitsi-videobridge.pid
    start program = "/bin/systemctl start jitsi-videobridge"
    stop program = "/bin/systemctl stop jitsi-videobridge"
    restart program = "/bin/systemctl restart jitsi-videobridge"
    if totalmem > 500 MB for 5 cycles then restart
    if 3 restarts within 15 cycles then stop

– Alex Schroeder 2020-03-20 08:18 UTC

Had my first virtual tea via Jitsi with my wife in another room and a friend in the neighbourhood. Got to experiment with phone and laptop, camera and external microphone. 🙂

– Alex Schroeder 2020-03-20 15:02 UTC

I am trying to get Jitsi Meet to work. I have all the hostnames configured and a Let’s Encrypt cert for all of them, and I got nginx configured to show the web-interface. jitsi-videobridge is running and saying things in its logfile, but jicofo only prints a couple of warnings and then nothing more, which I think is wrong? (It is a Java-program after all). Everybody who connects can see video of themselves, and that others are present, but no video or audio from other participants. Any hints? What does jicofo log in your working setup?

Adam 2020-03-20 16:30 UTC

Ah, I got it working by adding the prosody user with the correct password and noticing that port 5347 is only listened on locally, so I should use localhost in jicofo/config and jitsi-videobridge/config. Thanks for the inspiration!

Adam 2020-03-20 17:04 UTC

Jicofo logs a ton of info messages and no errors: focus request, joining the room, chat room event, granted ownership, member joined, another focus request, another member joining the room, another chat room event, a conference created, a participant added, nothing out of the ordinary. There is one warning “no jingle session yet” immediately followed by an info log message saying a session-accept was received.

Back when the setup was not working, I had Java exceptions in there: java.lang.ClassNotFoundException, IllegalArgumentException, stuff like that.

Check for errors in your Prosody log files, too. /var/log/prosody/prosody.err had errors (”Error binding encrypted port for https: No certificate present in SSL/TLS configuration for https port 5281”) back when it wasn’t working (this was also visible in /var/log/prosody/prosody.log).

– Alex Schroeder 2020-03-20 17:05 UTC

Hah! Excellent. 🙂

I only have localhost listed in the Jicofo config file:

# grep HOST /etc/jitsi/*/config 

– Alex Schroeder 2020-03-20 17:06 UTC


I have localhost in both HOST= lines; works.

I can’t make the Android app work, though - it just immediately says it was disconnected. I can’t see it trying to connect in the webserver nor the prosody log - did you do something special to get that working?

Adam 2020-03-20 18:39 UTC

Ah, the app didn’t work because I used the cert.pem instead of the fullchain.pem as the ssl-certificate in the webserver - now the Android app works as well!

Adam 2020-03-20 18:58 UTC

Perfect. Thanks for posting about your experience!

– Alex Schroeder 2020-03-20 23:29 UTC

Let’s see... Changing from “stable” to “unstable” in /etc/apt/sources.list.d/jitsi-stable.list and running apt update and apt list --upgradable:

jicofo/unstable 1.0-534-1 amd64 [upgradable from: 1.0-508-1]
jitsi-meet-prosody/unstable 1.0.3905-1 all [upgradable from: 1.0.3729-1]
jitsi-meet-web-config/unstable 1.0.3905-1 all [upgradable from: 1.0.3729-1]
jitsi-meet-web/unstable 1.0.3905-1 all [upgradable from: 1.0.3729-1]
jitsi-meet/unstable 1.0.4304-1 all [upgradable from: 1.0.4101-1]
jitsi-videobridge/unstable 1132-1 amd64 [upgradable from: 1126-1]

Unfortunately, however:

The following NEW packages will be installed:
  coturn jitsi-meet-turnserver libevent-core-2.1-6 libevent-extra-2.1-6 libevent-openssl-2.1-6 libevent-pthreads-2.1-6 libhiredis0.14
  libnginx-mod-http-auth-pam libnginx-mod-http-dav-ext libnginx-mod-http-echo libnginx-mod-http-geoip libnginx-mod-http-image-filter
  libnginx-mod-http-subs-filter libnginx-mod-http-upstream-fair libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream nginx
  nginx-common nginx-full sqlite3 uuid-runtime
The following packages will be upgraded:
  jicofo jitsi-meet jitsi-meet-prosody jitsi-meet-web jitsi-meet-web-config jitsi-videobridge
6 upgraded, 22 newly installed, 0 to remove and 0 not upgraded.

I don’t really want nginx – I’m an Apache person!

– Alex Schroeder 2020-03-23 14:56 UTC

Installing Coturn to get rid of Google’s STUN servers.

– Alex Schroeder 2020-03-23 23:48 UTC

I think I’m running an anonymous TURN server for now. The things we do for Corona! 😇

apt install coturn

Edit /etc/default/coturn.conf and change it to TURNSERVER_ENABLED=1. Then systemctl restart coturn and systemctl restart jitsi-videobridge (I guess?). It’s still working, as far as I can tell.

– Alex Schroeder 2020-03-27 16:13 UTC

Also note 2020-03-26 Jitsi and the CPU.

– Alex Schroeder 2020-03-29 10:04 UTC

Add Comment

2020-03-17 iPhone Picture Import Pains

My fault, my fault, I know. I still trust Apple more than Google, though. But some of these bugs really make me doubt Apple engineers use their own software. I have an iPhone 11 and an old MacBook Pro running the latest macOS. I don’t want to use Photos to store my pictures, just regular folders. So what I do is start the Preview app, select images, click the Import button, pick a folder on the external disk and import them. Then I click the delete button to delete the images on the phone.

Sounds simple, right?

But I get errors when doing it. My working hypothesis is that this only works for images, not movies. I can select them, but somewhere along the way, they cause errors. So now I’m importing 1400 pictures in small chunks, skipping movies.

Ugh. 😟

Oh, and then I notice that if you just sit by the laptop and click OK every once in a while, some of the videos actually get imported. But here’s why I think the Apple engineers don’t use their own software: the error message then only lists the first four that didn’t work:

An error occurred while importing. 18 items were not imported: 

Thank you so much.

The current workaround is to import them into Photos (that works), export them from there (as originals), and then delete them im Photos again. Sounds like a deal.

OK, so I have 2731 pictures and 144 movies to look at...


Add Comment



Please make sure you contribute only your own work, or work licensed under the GNU Free Documentation License. Note: in order to facilitate peer review and fight vandalism, we will store your IP number for a number of days. See Privacy Policy for more information. See Info for text formatting rules. You can edit this page if you need to fix typos. You can subscribe to updates by email without leaving a comment.

To save this page you must answer this question:

Please say HELLO.

Referrers: Diary Diary PC Infravision in OD&D Diary