Skype-for-Business on Linux

2019-12-16

Sometimes we Linux types are forced into the Micro$oft world. If you have to attend a conference call on Skype-for-Linux (not plain Skype) — we had to run a Windows VM or similar to do it. No longer. Here’s instructions to run Skype-for-Business on Ubuntu 16.04 and 18.04. For other Linux distros I imagine the steps are similar. I hope this helps!


Introduction

Skype-for-business (S4B), formerly called Lync, formerly called Office Communicator, is meeting collaboration software. It’s similar to HPE MyRoom (recommended, free) or Microsoft Teams, both of which run fine on Linux.

But Skype-for-business on Linux never got much love from Microsoft, so you’ll have to do a few things described here to use it on Linux. The below are instructions for two versions of Ubuntu; similar things should work on other distros.  You’ll have most of the S4B functionality, including

  • Chat
  • Audio calls
  • Join conference calls
  • See shared screens
  • Share you screen to others

In the following instructions, most of the packages are used for desktop viewing/sharing. If you need only chat, install just the pidgin and pidgin-sipe packages, then proceed to setup your account.

But for (nearly) full functionality, read on:

Package Install

1) First, it really helps to nuke all related packages. You’ll re-install them in just a bit, getting the right versions:

sudo apt remove freerdp2-x11 gstreamer1.0-nice libfarstream-0.2-5 libfreerdp-client2-2 libfreerdp-server2-2 libfreerdp-shadow-subsystem2-2 libfreerdp-shadow2-2 libfreerdp2-2 libnice10 libwinpr-tools2-2 libwinpr2-2 pidgin pidgin-data pidgin-libnotify pidgin-sipe remmina remmina-common remmina-plugin-rdp remmina-plugin-secret remmina-plugin-vnc 

2) The remmina components have a way of sticking around. And sometimes pidgin. Kill ’em:

sudo killall -9 remmina pidgin

3) Pin the pidgin-sipe package (at 600 or higher) so you don’t get the older one.  Create the file /etc/apt/preferences.d/sipe-collab-600 with these contents:

Package: *
Pin: release o=LP-PPA-sipe-collab
Pin-Priority: 600

4) Add the newer sipe-collab repo:

sudo apt-add-repository ppa:sipe-collab
sudo apt-get update
sudo apt-get upgrade

Note: If you need to use a proxy server to access the Internet, set it via BOTH the http_proxy and https_proxy envvars, and use -E with sudo so they’re passed on to the command.

For example:

export http_proxy=http://your-proxy-server.your-corp.com:8080
export https_proxy=http://your-proxy-server.your-corp.com:8080
sudo -E add-apt-repository ppa:sipe-collab/ppa/
sudo -E apt-get update
sudo -E apt-get upgrade

5) Install this whole collection of packages:

sudo apt-get install freerdp2-x11 gstreamer1.0-nice libfarstream-0.2-5 libfreerdp-client2-2 libfreerdp-server2-2 libfreerdp-shadow-subsystem2-2 libfreerdp-shadow2-2 libfreerdp2-2 libnice10 libwinpr-tools2-2 libwinpr2-2 pidgin pidgin-data pidgin-libnotify pidgin-sipe remmina remmina-common remmina-plugin-rdp remmina-plugin-secret remmina-plugin-vnc 

That should do it. Run pidgin to get things going.

Run It

You should have a menu item for Pidgin, often under

Applications → Internet

but the location varies depending upon the desktop environment you have. You may also run it from the command line. Just enter the command ‘pidgin’.

Hangs/Nothing?

If it just hangs and you don’t see anything, first kill all pidgin instances (killall -9 pidgin), then remove the prior configuration for it, which would be found in the ~/.purple directory. Simply nuke the whole dir:

rm -fr ~/.purple

If you’ve been playing around with this already, it’s a good idea to start clean even if it doesn’t hang.

Pidgin Account Setup

In Pidgin, create an Office Communicator account. If this is the first time, or you nuked the config and are starting clean, it should prompt you to setup an account. Otherwise, go to Accounts –> Manage Accounts and click Add. For protocol choose “Office Communicator”. Then set these options, most of which are defaults:

Basic Tab:
  Username: email-addr
  Login:    DOMAIN\username
  Password: whatever-you-use

Advanced Tab:
  server:port - leave blank
  Connection type - leave auto
  User Agent: UCCAPI/16.0.6965.5308 OC/16.0.6965.2117 
  Authentication scheme - leave at Auto
  All the rest - leave blank or unchecked

Proxy Tab:
  Leave Proxy type on "Use Global Settings"

Voice and Video Tab:
  Leave "use silence suppression" UNCHECKED

Click the Add button at the bottom to save your settings. Pidgin should try to connect to this account automatically; if it does not, make sure that this new account is “enabled” in the Manage Accounts dialog box.

Test Your Account Setup

Exit Pidgin then restart it. It should connect to the corporate server and you’ll see your buddy list. If not, try running Pidgin from the command line — just enter the command “pidgin”. If you want to get overrun with output, you can also use the -d option to enable debugging. But be warned, it’s a lot of output!

FAQ’s

Connect to Server Fails?

I often see that the first connect to the SIPE server fails. Just try again, then it works fine.

Start a Chat with Someone

Find their name in the Buddies list. Right click and select “IM”.

Share your desktop with Someone

Find their name in the Buddies list. Right click and select “Share my Desktop”.

Join a Conference Call

This is easy – you just need the link for the call, which usually is in the invite. But where you paste the link is a bit “hidden”. Find it under

Accounts → (your email addr) → Join Scheduled Conference…

Paste the link into the Meeting Location field then click Join.

Share your desktop to a conference call

In the call window, do Media → Share my Desktop


Inspired by xhaakon’s (Jakub Adam’s) post at https://github.com/tieto/sipe/issues/183

Enjoy!
— Steve

Pronunciation of UNIX/Linux Meta-character Sets

Working on UNIX and Linux shells and with shell scripts, as well as Perl and other scripting languages, is rife with “meta-characters” and combinations of meta-characters. Reading each character literally is tedious and can be ambiguous; over time a defacto English pronunciation has emerged for them. Many of these pronunciations settled into place as far back as the 1970’s.

Single Characters

!  "Bang", in math say "Not"
@ "At"
# "Sh" or "Shuh" (from "shell")
Also "hash" when used outside a shell script,
but never "pound".
$ "Doll" (from "dollar"),
"Var" when preceding a variable
as in $func ("var func")
or $1 ("var one").
% "Cent" or "Perk" (from "percent")
^ "Hat", sometimes "Not"
& "Bag" (from "background") or "Amp" (from "ampersand")
in math, "Band" (bitwise and)
* "Star" or "Pop", also "Ass" (from "asterix")
in math, "Times"
( "Open", or "Open paren"
if part of a function then "Of"
as in x(2) "X of two"
) "Close", or "Close Paren"
{ "O-Brace",
or { "Brace" ... } "Close" (matches nested type).
When opening a choice set say "Choice" or
"Choice of" ending with "End", as in {a,bb,ccc}
"Choice aye comma be be comma cee cee cee end"
} "C-Brace"
[ "O-Brak",
or [ "Brak" ... ] "Close" (matches nested type)
] "C-Brak"
- "Dash", "Standard In/Out" (by itself)
in math expressions say unary "Neg"
or binary "Minus"
_ "Under"
+ "Plus" or "Add" (no surprise here)
= For assignment say "Gets", for compare say "Equals" (rare)
~ "Tilda", for bit inversion say "Flip",
as shell input say "Home".
' "Tick" (single quote or single apostrophe)
" "Quote" (no surprise here),
or "O-Quote" for opening quote
and "End" for end quote
` "Zek" (from "exec") or "Back" (the back-tick)
. "Dot" (no surprise here), in file path context say "Here"
as in ./a.b is "here slash a dot b"
, "Comma" (no surprise here)
/ "Slash" - only noobs say "forward slash"
In a path the first and last slashes are *always*
pronounced, if present; but middle slashes are
often silent.
In math, "Per", "By", or "Over"
\ "Whack" - don't say "back slash"!
| "Pipe" or "Send", in math "Boor" (bitwise or)
|& is "Piping" not "pipe and"
: "Colon" or "Ta", often silent in context
; "Sem" or "Semi" (from "semicolon")
< "From" in redirection, "Less" in comparison
> "To" in redirection, "Great" in comparison
? "What" (without inflection) or "Kwess" (from "question")
w "Dub" (from "double-u") - Don't say "Double U"
"Blank" for a single blank character
"Tab" when an actual tab character is used
"Space" or "Whites" for a series of whitespace
"Next" or "Newline" for a newline (10) or (13)(10)
"Ret" or "Return" for an actual carriage return (13)

Uppercase letters or a word with a leading uppercase
letter are preceded with the word "Up", for example:
"ptrX3" is pronounced "pee tee ar up x three".
"q_Delta_X"
is "que under up Dee ee el tee ay under up x"
or "que under up delta under up x".
And for an entire uppercase word say "All up" then the
letters or word:
"EOF" is pronounced "all up ee oh eff".

Examples

This snipped of shell is read as:

TBS…

Character Combinations

#!   "SheBang"
++   "Barb" or "plus plus"
--   "Dada" or "dosh" when preceding an option
         "Down" or "dek-er" (from decrement) in math
..   "Dit" or "ditdit", or in range context "Through",
         In filepath context say "Up" or "Updir"
...  "Whatever", or in range context "Ranges"
<>   "Box"
>&   "Goes to", as in 2>&1 "Two goes to One"
!!   "Bang bang"
&&   "And" (not "and-and")  See & "band".
        When sequence chaining, "Then".
||   "Or" (not "or-or")     See | "boor".
        When sequence chaining, "Else".
|&   "Piping", not "pipe and"
:=   "Gives" (also called "Walrus" as in a Pascal or Golang assign)
::   "Scope"
==   "Is" (comparison), "Gets" (assignment, rare)
!=   "Isn't"
<=   "Less-Ek" or "Less than"
>=   "Big-Ek" or "Greater than"
=>   "Fat comma"
<<   "Much less", "shift left"
<<<  "Rotate left"
>>   "Append", "shift right"
>>>  "Rotate right"
=~   "Kinda like"
!~   "Not like"
$?   "Huh?"
$!   "Wow"
etc  "Etsy"
www  "Dub dub dub"
()   "Nothing" in list contexts

Special operators, common in Perl but used in shells too
Operator     Nickname     Function
 0+           Venus                        
                    numification
 @{[ ]}       Turtle or Babycart           
                    list interpolation
 !!           Bang bang                    
                    boolean conversion
 ~~           Inchworm                     
                    scalar
 ~-           Inchworm on a stick          
                    high-precedence decrement
 -~           Inchworm off a stick         
                    high-precedence increment
 -+-          Space station                
                    high-precedence numification
 =( )=        Saturn                       
                    scalar / list context
 =< >=~       Flaming X-Wing               
                    match input, assign captures
 ~~<>         Kite                         
                    a single line of input
 }{           Eskimo greeting              
                    END block for one-liners
 -=!   -=!!   Flathead                     
                    conditional decrement
 +=!   +=!!   Phillips                     
                    conditional increment
 x=!   x=!!   Pozidriv                     
                    conditional reset to ''
 *=!   *=!!   Torx                         
                    conditional reset to 0
 ,=>          Winking fat comma            
                    non-stringifying fat comma
 ()x!!        Enterprise (as in NCC-1701)                
                    boolean list squash
 0+!!         Truthkey                     
                    numeric boolean conversion
 ~~!!         Serpent of truth             
                    numeric boolean conversion
 ||()         Abbott and Costello          
                    remove false scalar from list
 //()         Leaning Abbott and Costello  
                    remove undef from list

Constant    Nickname            Value
 <=><=><=>   Space fleet          0
 <~>         Amphisbaena      $ENV{HOME}

AlphaMonth – Take Two

Back in this post, I proposed a new set of month names that would sort the same in both chronological and alphabetical order.    I’ve since come across a similar proposal by Stewart Smith.  I like his proposed month names better than what I originally proposed:

No Name   Abbrv  Days
----------------------------
 1 Alamen   Am   30
 2 Belamen  Bm   31
 3 Calamen  Cm   30
 4 Delamen  Dm   31
 5 Edamen   Em   30
 6 Fedamen  Fm   31
 7 Gadamen  Gm   30
 8 Hedamen  Hm   31
 9 Inamen   Im   30
10 Jenamen  Jm   31
11 Kanamen  Km   30
12 Lenamen  Lm   31 or 30
----------------------------

FWIW.

Orange Pi Flavors

Since the Raspberry Pi Zero and Zero W are not available in bulk quantity, I looked around for alternatives.  The C.H.I.P. seems to be a great option, but the company has been unable to fulfill it’s orders and the $9 version has been discontinued 🙁   The Banana Pi is a knock-off of the rPi but the cost is 50% to 100% more than the rPi.  Similar for the NanoPi, about double the cost.  Finally I found the Orange Pi, it’s costs are similar (some as low as $7) yet there’s many variations of it.  Trying to make sense of the options, I put together a table that compares some aspects of the oPi:

oPi-models

The Berry Fire

Worth repeating: from the 2015 Mt Herman CWPP, a recounting of the Berry Fire:

21 April 1989; Turner Road,
Mount Herman Estates, Monument Colorado

The Berry Fire of 1989 is a perfect example of major risks which still threaten the Mount Herman Community and the Pike National Forest. The Berry Fire was human-caused. Whether it was arson or accident, it is indicative of a major threat. The fire started on private property at a location which offered the opportunistic conditions for a hidden campfire and under-aged drinking; a practice that has now transferred to locations all along Mt. Herman Road. In 1989 there were only three residences in Mount Herman Estates and the quiet west end of Turner Road was a relatively short distance from Monument, up reasonably maintained dirt roads. The fire that grew and spread north onto the Pike National Forest may have been intentional or it may have been an improperly extinguished campfire (such as the scores of fires that are lit and left burning every season up and down Mt. Herman Road).

Another major risk factor that contributed to this fire was fuel loading. It should be noted that wind was not a factor and high daytime temperatures preheating the fuels was also not a factor. It was April 21st, early spring, temperatures were mild, no new grasses would sprout for a month and the oak leafing out was still more than a month in the future.

The initial fire began to spread during a clear Friday morning. Smoke was noted and a Type 6 engine (brush truck) responded to the scene and small areas of flame were attacked by the crew, within the areas that they could reach near Turner Road. It was believed that they had taken the upper hand and that the small fire would be contained.

However, as the fire punked out to the north it entered huge areas of Gambel oak which had a forest floor of duff – oak leaves and grasses which were now preheating from the noonday sun. The fire soon involved large stands of winter dried oak and took off. On a windless day this fire grew, in a stationary location, creating its own wind and starting to spread in all directions, fed by its own intensity. The vertical column of smoke rising past thirty thousand feet was clearly visible from downtown Denver. As the fire grew, one of its edges marched slowly back towards Turner Road.
The ten foot tall oak in its path fed a wall of flames fifty feet high. These flames, without wind driving them, were more than the Type 2 engines (now defending the two homes on Turner Road) could contend with and the decision was made to withdraw to safety. Both homes had been built without “defensible space” (a term completely outside the vocabulary of Colorado’s WUI residents of 1989).

The Berry Fire was only a few hours old, but now it was huge and the afternoon winds were starting to rise. Emergency responders understood the growing threat, and plans for evacuating Monument and Palmer Lake were being considered as word of this spread. Unencumbered by today’s bureaucratic barriers, Fort Carson jumped into the fray and sent two CH-47 Chinook helicopters equipped with drop buckets. They immediately started dipping from Monument Lake and hitting the eastern perimeter of the fire. The minor winds that were rising were initially coming out of the southwest and were slowly driving the fire in a counterclockwise path that was consuming more than one thousand acres of the Pike National Forest Monument Preserve and the east face of Mount Herman. One small benefit of these winds was that the fire changed its direction, within feet of the two homes on Turner Road, and the homes were saved by the engine crews. The fire was left to punk around in the oak and pine on the northern properties of Mount Herman Estates.

Now, in 2015, Red Flag days are a common year-round occurrence. But April 21st, 1989 had only one ingredient that goes into a Red Flag Day calculation; dry fuels. Yet, within a few hours a small fire had turned into an uncontrollable inferno that in retrospect was neither stopped nor mildly impacted by any human effort. The fire’s boundaries were almost completely defined by the wind and, in a sense, by the lack of wind. By late afternoon the small winds had died, the temperature was dropping while the humidity was rising, and the fire “laid down”. The next morning, slurry drops high on the slope of Mount Herman secured the western boundary of the Berry Fire.

The fire made the news for a few more days; it was an exciting local event – but not nearly as news worthy as the previous year’s Yellowstone Fire. And then Colorado forgot about it. But not all of us. Some of us lost our beautiful back yard and part of our dreams that day. Thousands of Coloradans lost a whole lot more to wildfires in the years since then.

View of Mt Herman one month after the 1989 Berry Fire
View of Mt Herman one month after the 1989 Berry Fire

The author of this depiction is Mark Schumann, a long-time Mt Herman resident.  Edits by Steve Roscio and Diane Strohm.
Hearing this makes me wonder… what happened to the descendants of the Coyote Girl of Monument?  I hope they were safe during the fire!

Lots of alias addresses on an IP interface?

It’s easy to add multiple IP addresses to an interface in Linux. For example, you want to have both the address 172.16.0.13 and 192.168.0.17 for your Ethernet device. But, can we create LOTS and LOTS of addresses?

For fun, I wrote a little script to create bunches of alias addresses. I tested on a RedHat Enterprise 6.8 64bit VM (running kernel 2.6.32-642.el6.x86_64), since there’s still lots of this older o/s out there. I tried 50,000 alias addresses, and ta da! it works fine:

# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:76:75:29 brd ff:ff:ff:ff:ff:ff
inet 172.16.47.139/16 brd 172.16.255.255 scope global eth0
inet 192.168.0.1/32 scope global eth0:3232235521
inet 192.168.0.2/32 scope global eth0:3232235522
inet 192.168.0.3/32 scope global eth0:3232235523
inet 192.168.0.4/32 scope global eth0:3232235524
. . .
inet 192.168.195.77/32 scope global eth0:3232285517
inet 192.168.195.78/32 scope global eth0:3232285518
inet 192.168.195.79/32 scope global eth0:3232285519
inet 192.168.195.80/32 scope global eth0:3232285520
inet6 fe80::a00:27ff:fe76:7529/64 scope link
valid_lft forever preferred_lft forever

The network seems plenty responsive still; and I can ping any of the alias addresses.  Creation of 50,000 aliases took about a minute.  FWIW.

Ubuntu Window Border – Bigger than 1px

Many of the default Ubuntu desktop themes come with a 1 pixel-wide window border.  This makes it difficult to resize your windows*

You can increase this window size by editing the parameters for your theme.  First off, you need to figure out which theme you’re using.   In many themes, you’ll find this at:
System -> Preferences -> Look and Feel -> Appearance -> Theme tab.

Once you know the theme, open a terminal and edit the file that defines it.  For this example, I’m using the Ambiant-MATE theme with the metacity window manager.  Thus, the file I want to edit is:

/usr/share/themes/Ambiant-MATE/metacity-1/metacity-theme-1.xml

You’ll want to be root to do this.  Look for the frame_geometry_normal section (usually the first), and change these three lines from 1 to a larger value.  I found that 4 pixels is adequate:

<distance name=”left_width” value=”4″/>
<distance name=”right_width” value=”4″/>
<distance name=”bottom_height” value=”4″/>

Save the file, then you need to log out and log back in so your window manager restarts.  That’s it!

 

*Unless you use the Alt + Right-Mouse-Button or Alt-F8 tricks, but those are not commonly known.