In recent years we’ve seen an increasing rate of customer requests for a command-line alternative to the ThinLinc web administration interface. As a response to this uptick, ThinLinc 4.15.0 brings the new command-line administration tool
tlctl. Based on the feature requests we’ve gotten over the years, by far the most popular request was simplifying administration of running graphical sessions in large ThinLinc clusters.
Administration of the sessions in a ThinLinc cluster has, up until now, exclusively been done through the web administration interface. In smaller ThinLinc clusters, that way of session management is quick and easy. However, it becomes inefficient when the user count gets large. Unlike the web administration interface,
tlctl allows both filtering of sessions and terminating multiple sessions simultaneously – instrumental when managing large clusters.
Just as the web administration interface,
tlctl is to be run on one of the master nodes. Firstly,
tlctl lets you see all currently running sessions:
$ sudo tlctl session list USER DISPLAY AGENT STATUS AGE ================================================================ robert 10 agent1.example.com disconnected 6 day(s) samuel 10 agent2.example.com connected 9 hour(s) william 12 agent1.example.com connected 30 minute(s) Listed 3 session(s).
The information presented in this example is identical to what’s visible in the web administration session list. However,
tlctl also allows filtering this list. For example, it is possible to only list and count the sessions running on a specific agent, or belonging to a specific user:
$ sudo tlctl session list --agent=agent1.example.com USER DISPLAY AGENT STATUS AGE ================================================================ robert 10 agent1.example.com disconnected 6 day(s) william 12 agent1.example.com connected 30 minute(s) Listed 2 session(s). $ sudo tlctl session list --user=samuel USER DISPLAY AGENT STATUS AGE ========================================================== samuel 10 agent2.example.com connected 9 hour(s) Listed 1 session(s).
These filtering arguments can also be combined. To uniquely identify a single session, you can filter on display and agent:
$ sudo tlctl session list --agent=agent1.example.com --display=12 USER DISPLAY AGENT STATUS AGE ============================================================= william 12 agent1.example.com connected 30 minute(s) Listed 1 session(s).
As briefly mentioned in the introduction,
tlctl is also capable of terminating sessions using the
tlctl session terminate command. The
terminate subcommand employs the same filtering options as
tlctl session list with the difference that
--all has to be explicitly specified to terminate all sessions. For example, to terminate any sessions belonging to the user
$ sudo tlctl session terminate --user=william Refreshing session information... Terminating: USER DISPLAY AGENT ==================================== william 12 agent1.example.com Summary: Terminate 1 session(s) Is this ok? [y/N]: y
tlctl session list, you may come across sessions marked as
$ sudo tlctl session list --agent=dead-agent.example.com USER DISPLAY AGENT STATUS AGE ============================================================= anton 10 dead-agent.example.com unreachable 6 day(s) eric 11 dead-agent.example.com unreachable 8 day(s) jens 13 dead-agent.example.com unreachable 8 day(s) Listed 3 session(s).
This means the sessions in question reside on an agent node that cannot be reached by the master node. Naturally, such sessions cannot be terminated. However – we can make the master node stop tracking them. Abandoning thus risks leaving stray processes on the agent that will stay alive until the next system restart. Given an agent node that won’t come online again though, this is the right thing to do. The
--allow-abandon flag is used to abandon unreachable sessions:
$ sudo tlctl session terminate --allow-abandon --agent=dead-agent.example.com Refreshing session information... Abandoning: USER DISPLAY AGENT ====================================== anton 11 dead-agent.example.com eric 13 dead-agent.example.com jens 10 dead-agent.example.com Summary: Terminate 0 session(s) Abandon 3 session(s) Is this ok? [y/N]: y 3 session(s) are about to be abandoned. This may leave stray processes. Do you really want to abandon these? [y/N]: y
If this is not done, the ThinLinc client would ask all of the users with unreachable sessions whether they want to abandon the sessions or not the next time they reconnect. Hence, if you’re certain that the agent node won’t come back online, abandoning the sessions for the impacted users may avoid some unnecessary confusion.
We thank our community for their continuous feedback and support, which has been instrumental in shaping this tool. We look forward to hearing your opinions on how we can refine
tlctl and what features you want to see going forward. Thank you for being a part of this journey with us. Happy administrating!